2015-10-14 05:20:20 -04:00
# Zero Downtime Deploys
2016-03-26 17:03:14 -04:00
> New as of 0.5.0
2016-03-02 22:48:29 -05:00
2016-02-14 18:43:40 -08:00
```
2016-06-27 02:48:48 -04:00
checks:disable <app> [process-type(s)] Disable zero-downtime deployment for all processes (or comma-separated process-type list) * * *WARNING: this will cause downtime during deployments***
checks:enable <app> [process-type(s)] Enable zero-downtime deployment for all processes (or comma-separated process-type list)
2017-02-20 18:04:57 -07:00
checks:report [<app>] [<flag>] Displays a checks report for one or more apps
2016-06-27 02:48:48 -04:00
checks:run <app> [process-type(s)] Runs zero-downtime checks for all processes (or comma-separated process-type list)
checks:skip <app> [process-type(s)] Skip zero-downtime checks for all processes (or comma-separated process-type list)
2016-02-14 18:43:40 -08:00
```
2015-10-14 05:20:20 -04:00
2020-12-16 23:07:02 +01:00
By default, Dokku will wait `10` seconds after starting each container before assuming it is up and proceeding with the deploy. Once this has occurred for all containers started by an application, traffic will be switched to point to your new containers. Dokku will also wait a further `60` seconds * after * the deploy is complete before terminating old containers in order to give time for long running connections to terminate. In either case, you may have more than one container running for a given application.
2015-10-14 05:20:20 -04:00
2016-11-20 16:12:26 -07:00
You may both create user-defined checks for web processes using a `CHECKS` file, as well as customize any and all parts of this experience using the checks plugin.
2018-02-13 02:38:57 -05:00
> Web checks are performed via `curl` on Dokku host. Some application code - such
> as the Django framework - checks for specific hostnames or header values, these
> checks will fail. To avoid this:
>
2019-02-19 20:01:24 +08:00
> - Remove such checks from your code: Modify your application to remove the hostname check completely.
> - Allow checks from all hostnames: Modify your application to accept a dynamically provided hostname.
> - Specify the domain within the check: See below for further documentation.
2018-02-13 02:38:57 -05:00
2019-02-19 20:01:24 +08:00
## Configuring check settings using the `config` plugin
2016-11-20 16:12:26 -07:00
There are certain settings that can be configured via environment variables:
- `DOKKU_DEFAULT_CHECKS_WAIT` : (default: `10` ) If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running.
2019-02-19 20:01:24 +08:00
- `DOKKU_DOCKER_STOP_TIMEOUT` : (default: `10` ) Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands * also * respect this value. If not specified, the Docker defaults for the [`docker stop` command ](https://docs.docker.com/engine/reference/commandline/stop/ ) will be used.
- `DOKKU_WAIT_TO_RETIRE` : (default: `60` ) After a successful deploy, the grace period given to old containers before they are stopped/terminated. This is useful for ensuring completion of long-running HTTP connections.
2015-10-14 05:20:20 -04:00
2016-11-20 16:12:26 -07:00
The following settings may also be specified in the `CHECKS` file, though are available as environment variables in order to ease application reuse.
2016-03-03 11:00:04 -06:00
2016-11-20 16:12:26 -07:00
- `DOKKU_CHECKS_WAIT` : (default: `5` ) Wait this many seconds for the container to start before running checks.
- `DOKKU_CHECKS_TIMEOUT` : (default: `30` ) Wait this many seconds for each response before marking it as a failure.
- `DOKKU_CHECKS_ATTEMPTS` : (default: `5` ) Number of retries for to run for a specific check before marking it as a failure
## Skipping and Disabling Checks
> Note that `checks:disable` will now (as of 0.6.0) cause downtime for that process-type during deployments. Previously, it acted as `checks:skip` currently does.
You can choose to skip checks completely on a per-application/per-process basis. Skipping checks will avoid the default 10 second waiting period entirely, as well as any other user-defined checks.
2016-05-09 16:03:07 -07:00
```shell
2016-11-20 16:12:26 -07:00
# process type specification is optional
2016-07-03 17:13:46 -04:00
dokku checks:skip node-js-app worker,web
2016-05-09 16:03:07 -07:00
```
2016-07-03 17:13:46 -04:00
```
-----> Skipping zero downtime for app's (node-js-app) proctypes (worker,web)
-----> Unsetting node-js-app
2016-05-09 16:03:07 -07:00
-----> Unsetting DOKKU_CHECKS_DISABLED
-----> Setting config vars
DOKKU_CHECKS_SKIPPED: worker,web
2016-07-03 17:13:46 -04:00
```
2019-02-19 20:01:24 +08:00
Zero downtime checks can also be disabled completely. This will stop old containers * before * new ones start, which may result in broken connections and downtime if your application fails to boot properly.
2016-07-03 17:13:46 -04:00
```shell
dokku checks:disable node-js-app worker
```
```
-----> Disabling zero downtime for app's (node-js-app) proctypes (worker)
2016-05-09 16:03:07 -07:00
-----> Setting config vars
DOKKU_CHECKS_DISABLED: worker
-----> Setting config vars
DOKKU_CHECKS_SKIPPED: web
2016-03-03 11:00:04 -06:00
```
2019-03-13 16:55:33 -04:00
### Displaying checks reports for an app
2017-02-20 18:04:57 -07:00
> New as of 0.8.1
You can get a report about the app's checks status using the `checks:report` command:
```shell
dokku checks:report
```
```
2019-05-14 17:55:00 -04:00
=====> node-js-app checks information
2017-02-20 18:04:57 -07:00
Checks disabled list: none
Checks skipped list: none
2019-05-14 17:55:00 -04:00
=====> python-app checks information
2017-02-20 18:04:57 -07:00
Checks disabled list: none
Checks skipped list: none
2019-05-14 17:55:00 -04:00
=====> ruby-app checks information
2017-02-20 18:04:57 -07:00
Checks disabled list: _ all _
Checks skipped list: none
```
You can run the command for a specific app also.
```shell
2019-05-14 17:55:00 -04:00
dokku checks:report node-js-app
2017-02-20 18:04:57 -07:00
```
```
2019-05-14 17:55:00 -04:00
=====> node-js-app checks information
2017-02-20 18:04:57 -07:00
Checks disabled list: none
Checks skipped list: none
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
2019-05-14 17:55:00 -04:00
dokku checks:report node-js-app --checks-disabled-list
2017-02-20 18:04:57 -07:00
```
2019-02-19 20:01:24 +08:00
## Customizing checks
2016-11-20 16:12:26 -07:00
2019-02-19 20:01:24 +08:00
If your application needs a longer period to boot up - perhaps to load data into memory, or because of slow boot time - you may also use Dokku's `checks` functionality to more precisely check whether an application can serve traffic or not.
2016-11-20 16:12:26 -07:00
Checks are run against the detected `web` process from your application's `Procfile` . For non-web processes, Dokku will fallback to the aforementioned process uptime check.
To specify checks, add a `CHECKS` file to the root of your project directory. The `CHECKS` file should be plain text and may contain:
2019-02-19 20:01:24 +08:00
- check instructions
- settings (NAME=VALUE)
- comments (lines starting with #)
- empty lines
2016-11-20 16:12:26 -07:00
2019-09-06 21:21:25 -04:00
> For Dockerfile and Docker Image based deploys, the file *must* be in the `WORKDIR` directory of the built image. `/app` is used by default as the root container directory for buildpack-based deploys.
2016-11-20 16:12:26 -07:00
2019-02-19 20:01:24 +08:00
### Check instructions
2016-11-20 16:12:26 -07:00
2018-03-28 08:57:34 -04:00
The format of a check instruction is a path or relative URL, optionally followed by the expected content:
2016-11-20 16:12:26 -07:00
```
/about Our Amazing Team
```
The `CHECKS` file can contain multiple checks:
```
/ My Amazing App
/stylesheets/index.css .body
/scripts/index.js $(function()
/images/logo.png
```
To check an application that supports multiple hostnames, use relative URLs that include the hostname:
```
2018-04-07 14:19:14 -04:00
//admin.dokku.me Admin Dashboard
//static.dokku.me/logo.png
2016-11-20 16:12:26 -07:00
```
You can also specify the protocol to explicitly check HTTPS requests:
```
2018-04-07 14:19:14 -04:00
https://admin.dokku.me Admin Dashboard
https://static.dokku.me/logo.png
2016-11-20 16:12:26 -07:00
```
2019-02-19 20:01:24 +08:00
While a full URL may be used in order to invoke checks, if you are using relative URLs, the port * must * be omitted.
2016-11-20 16:12:26 -07:00
2020-12-30 05:48:29 -05:00
> Changed as of 0.22.5
Please note that dollar sign bracket characters (`{` and `}` ) must be escaped when used within a `CHECKS` file. Escaping follows golang template rules. The proper way to do this is via one of the following methods:
```
# escaping the `{` character
# using double-quotes
{{"{"}}
# using raw string constants
{{`{` }}
# escaping the `}` character
# using double-quotes
{{"}"}}
# using raw string constants
{{`}` }}
```
### Templating Checks Files
> New as of 0.22.5
An app's `CHECKS` file is sent through a single pass of the [`sigil` ](https://github.com/gliderlabs/sigil/ ) templating tool. This enables usage of Golang templating within application `CHECKS` files. In addition to general templating access, access to app environment variables is also allowed via the `var` function:
```
{{ var "SOME_ENV_VAR" }}
```
This may be useful if certain zero-downtime checks require access to an app-specific value, such as a domain name.
2019-02-19 20:01:24 +08:00
### Check settings
2016-11-20 16:12:26 -07:00
The default behavior is to wait for `5` seconds before running the checks, to timeout the checks after `30` seconds, and to attempt the checks `5` times. If the checks fail `5` times, the deployment is considered failed and the old container will continue serving traffic.
You can change the default behavior by setting `WAIT` , `TIMEOUT` , and `ATTEMPTS` to different values in the `CHECKS` file:
2016-03-03 10:40:31 -06:00
```
2016-11-20 16:12:26 -07:00
WAIT=30 # Wait 1/2 minute
TIMEOUT=60 # Timeout after a minute
ATTEMPTS=10 # Attempt checks 10 times
2016-03-03 10:40:31 -06:00
2016-11-20 16:12:26 -07:00
/ My Amazing App
```
2016-03-03 10:40:31 -06:00
2019-02-19 20:01:24 +08:00
## Manually invoking checks
2016-07-30 16:50:20 -04:00
2016-06-27 02:48:48 -04:00
Checks can also be manually invoked via the `checks:run` command. This can be used to check the status of an application via cron to provide integration with external healthchecking software.
2016-07-30 16:50:09 -04:00
Checks are run against a specific application:
```shell
dokku checks:run APP
```
2016-06-27 02:48:48 -04:00
```
-----> Running pre-flight checks
-----> Running checks for app (APP.web.1)
For more efficient zero downtime deployments, create a file CHECKS.
2021-02-28 01:18:33 -05:00
See https://dokku.com/docs/deployment/zero-downtime-deploys/ for examples
2016-06-27 02:48:48 -04:00
CHECKS file not found in container: Running simple container check...
-----> Waiting for 10 seconds ...
-----> Default container check successful!
-----> Running checks for app (APP.web.2)
For more efficient zero downtime deployments, create a file CHECKS.
2021-02-28 01:18:33 -05:00
See https://dokku.com/docs/deployment/zero-downtime-deploys/ for examples
2016-06-27 02:48:48 -04:00
CHECKS file not found in container: Running simple container check...
-----> Waiting for 10 seconds ...
-----> Default container check successful!
-----> Running checks for app (APP.worker.1)
For more efficient zero downtime deployments, create a file CHECKS.
2021-02-28 01:18:33 -05:00
See https://dokku.com/docs/deployment/zero-downtime-deploys/ for examples
2016-06-27 02:48:48 -04:00
CHECKS file not found in container: Running simple container check...
-----> Waiting for 10 seconds ...
-----> Default container check successful!
2016-07-30 16:50:09 -04:00
```
Checks can be scoped to a particular process type:
```shell
2016-11-20 15:37:05 -07:00
dokku checks:run node-js-app worker
2016-07-30 16:50:09 -04:00
```
2016-06-27 02:48:48 -04:00
2016-07-30 16:50:09 -04:00
```
2016-06-27 02:48:48 -04:00
-----> Running pre-flight checks
-----> Running checks for app (APP.worker.1)
For more efficient zero downtime deployments, create a file CHECKS.
2021-02-28 01:18:33 -05:00
See https://dokku.com/docs/deployment/zero-downtime-deploys/ for examples
2016-06-27 02:48:48 -04:00
CHECKS file not found in container: Running simple container check...
-----> Waiting for 10 seconds ...
-----> Default container check successful!
2016-07-30 16:50:09 -04:00
```
2019-02-19 20:01:24 +08:00
An app process ID may also be specified:
2016-07-30 16:50:09 -04:00
```shell
2016-11-20 15:37:05 -07:00
dokku checks:run node-js-app web.2
2016-07-30 16:50:09 -04:00
```
2016-06-27 02:48:48 -04:00
2016-07-30 16:50:09 -04:00
```
2016-06-27 02:48:48 -04:00
-----> Running pre-flight checks
-----> Running checks for app (APP.web.2)
For more efficient zero downtime deployments, create a file CHECKS.
2021-02-28 01:18:33 -05:00
See https://dokku.com/docs/deployment/zero-downtime-deploys/ for examples
2016-06-27 02:48:48 -04:00
CHECKS file not found in container: Running simple container check...
-----> Waiting for 10 seconds ...
-----> Default container check successful!
2016-07-30 16:50:09 -04:00
```
Non-existent process types will result in an error:
```shell
2016-11-20 15:37:05 -07:00
dokku checks:run node-js-app non-existent
2016-07-30 16:50:09 -04:00
```
2016-06-27 02:48:48 -04:00
2016-07-30 16:50:09 -04:00
```
2016-06-27 02:48:48 -04:00
-----> Running pre-flight checks
Invalid process type specified (APP.non-existent)
2016-07-30 16:50:09 -04:00
```
2016-06-27 02:48:48 -04:00
2019-02-19 20:01:24 +08:00
Non-existent process IDs will * also * result in an error
2016-07-30 16:50:09 -04:00
```shell
2016-11-20 15:37:05 -07:00
dokku checks:run node-js-app web.3
2016-07-30 16:50:09 -04:00
```
```
2016-06-27 02:48:48 -04:00
-----> Running pre-flight checks
Invalid container id specified (APP.web.3)
```
2019-02-19 20:01:24 +08:00
## Example: Successful Rails deployment
2015-03-26 18:29:39 -04:00
2019-02-19 20:01:24 +08:00
In this example, a Rails application is successfully deployed to Dokku. The initial round of checks fails while the server is starting, but once it starts they succeed and the deployment is successful. `WAIT` is set to `10` because our application takes a while to boot up. `ATTEMPTS` is set to `6` , but the third attempt succeeds.
2015-03-26 18:29:39 -04:00
2021-07-09 22:37:28 -04:00
### Successful `CHECKS` file
2015-03-26 18:29:39 -04:00
2016-07-03 17:13:46 -04:00
```
2016-03-03 12:28:13 -06:00
WAIT=10
2015-04-07 11:02:34 -04:00
ATTEMPTS=6
2016-03-03 12:50:22 -06:00
/check.txt simple_check
2016-07-03 17:13:46 -04:00
```
2015-03-26 18:29:39 -04:00
2016-03-03 12:32:15 -06:00
For this check to work, we've added a line to `config/routes.rb` that simply returns a string:
2016-07-03 17:13:46 -04:00
```
2016-03-03 12:32:15 -06:00
get '/check.txt', to: proc {[200, {}, ['simple_check']]}
2016-07-03 17:13:46 -04:00
```
2015-03-26 18:29:39 -04:00
2021-07-09 22:37:28 -04:00
### Successful deploy output
2015-03-26 18:29:39 -04:00
2019-02-19 20:01:24 +08:00
> Note: The output has been trimmed for brevity.
2015-03-26 18:32:50 -04:00
2016-07-03 17:13:46 -04:00
```shell
2015-03-26 18:29:39 -04:00
git push dokku master
2016-07-03 17:13:46 -04:00
```
2015-03-26 18:29:39 -04:00
2016-07-03 17:13:46 -04:00
```
2015-03-26 18:29:39 -04:00
-----> Cleaning up...
2018-04-07 14:13:55 -04:00
-----> Building node-js-app from herokuish...
2015-03-26 18:29:39 -04:00
-----> Adding BUILD_ENV to build environment...
-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.0.0
.....
-----> Discovering process types
Procfile declares types -> web
2018-04-07 14:13:55 -04:00
-----> Releasing node-js-app...
-----> Deploying node-js-app...
2015-03-26 18:29:39 -04:00
-----> Running pre-flight checks
2016-03-03 12:28:13 -06:00
-----> Attempt 1/6 Waiting for 10 seconds ...
2015-03-26 18:29:39 -04:00
CHECKS expected result:
http://localhost/check.txt => "simple_check"
!
curl: (7) Failed to connect to 172.17.0.155 port 5000: Connection refused
2015-04-20 16:32:18 -07:00
! Check attempt 1/6 failed.
2016-03-03 12:28:13 -06:00
-----> Attempt 2/6 Waiting for 10 seconds ...
2015-03-26 18:29:39 -04:00
CHECKS expected result:
http://localhost/check.txt => "simple_check"
!
curl: (7) Failed to connect to 172.17.0.155 port 5000: Connection refused
2015-04-20 16:32:18 -07:00
! Check attempt 2/6 failed.
2016-03-03 12:28:13 -06:00
-----> Attempt 3/6 Waiting for 10 seconds ...
2015-03-26 18:29:39 -04:00
CHECKS expected result:
http://localhost/check.txt => "simple_check"
-----> All checks successful!
2018-04-07 14:13:55 -04:00
=====> node-js-app container output:
2015-03-26 18:29:39 -04:00
=> Booting Thin
=> Rails 4.2.0 application starting in production on http://0.0.0.0:5000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Thin web server (v1.6.3 codename Protein Powder)
Maximum connections set to 1024
Listening on 0.0.0.0:5000, CTRL+C to stop
2018-04-07 14:13:55 -04:00
=====> end node-js-app container output
2015-03-26 18:29:39 -04:00
-----> Running post-deploy
2018-04-07 14:19:14 -04:00
-----> Configuring myapp.dokku.me...
2015-03-26 18:29:39 -04:00
-----> Creating http nginx.conf
Reloading nginx
-----> Shutting down old container in 60 seconds
=====> Application deployed:
2018-04-07 14:19:14 -04:00
http://myapp.dokku.me
2016-07-03 17:13:46 -04:00
```
2015-03-26 18:29:39 -04:00
2019-02-19 20:01:24 +08:00
## Example: Failing Rails deployment
2016-03-03 12:28:13 -06:00
2019-02-19 20:01:24 +08:00
In this example, a Rails application fails to deploy. The reason for the failure is that the PostgreSQL database connection fails. The initial checks will fail while we wait for the server to start up, just like in the above example. However, once the server does start accepting connections, we will see an error 500 due to the PostgreSQL database connection failure.
2015-03-26 18:29:39 -04:00
2019-02-19 20:01:24 +08:00
Once the attempts have been exceeded, the deployment fails and we see the container output, which shows the PostgreSQL connection errors.
2015-03-26 18:29:39 -04:00
2021-07-09 22:37:28 -04:00
### Failing `CHECKS` file
2015-03-26 18:29:39 -04:00
2016-07-03 17:13:46 -04:00
```
2016-03-03 12:28:13 -06:00
WAIT=10
2015-04-07 11:02:34 -04:00
ATTEMPTS=6
2015-03-26 18:29:39 -04:00
/
2016-07-03 17:13:46 -04:00
```
2015-03-26 18:29:39 -04:00
2019-02-19 20:01:24 +08:00
> The check to the root url `/` would normally access the database.
2015-03-26 18:29:39 -04:00
2021-07-09 22:37:28 -04:00
### Failing deploy output
2015-03-26 18:29:39 -04:00
2019-02-19 20:01:24 +08:00
> Note: The output has been trimmed for brevity.
2015-03-26 18:29:39 -04:00
2016-07-03 17:13:46 -04:00
```shell
2015-03-26 18:29:39 -04:00
git push dokku master
2016-07-03 17:13:46 -04:00
```
2015-03-26 18:29:39 -04:00
2016-07-03 17:13:46 -04:00
```
2015-03-26 18:29:39 -04:00
-----> Cleaning up...
2018-04-07 14:13:55 -04:00
-----> Building node-js-app from herokuish...
2015-03-26 18:29:39 -04:00
-----> Adding BUILD_ENV to build environment...
-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.0.0
.....
Discovering process types
Procfile declares types -> web
2018-04-07 14:13:55 -04:00
Releasing node-js-app...
Deploying node-js-app...
2015-03-26 18:29:39 -04:00
Running pre-flight checks
2016-03-03 12:28:13 -06:00
-----> Attempt 1/6 Waiting for 10 seconds ...
2015-03-26 18:29:39 -04:00
CHECKS expected result:
http://localhost/ => ""
!
curl: (7) Failed to connect to 172.17.0.188 port 5000: Connection refused
2015-04-20 16:32:18 -07:00
! Check attempt 1/6 failed.
2016-03-03 12:28:13 -06:00
-----> Attempt 2/6 Waiting for 10 seconds ...
2015-03-26 18:29:39 -04:00
CHECKS expected result:
http://localhost/ => ""
2015-04-20 16:32:18 -07:00
!
2015-03-26 18:29:39 -04:00
curl: (7) Failed to connect to 172.17.0.188 port 5000: Connection refused
2015-04-20 16:32:18 -07:00
! Check attempt 2/6 failed.
2016-03-03 12:28:13 -06:00
-----> Attempt 3/6 Waiting for 10 seconds ...
2015-03-26 18:29:39 -04:00
CHECKS expected result:
http://localhost/ => ""
2015-04-20 16:32:18 -07:00
!
2015-03-26 18:29:39 -04:00
curl: (22) The requested URL returned error: 500 Internal Server Error
2015-04-20 16:32:18 -07:00
! Check attempt 3/6 failed.
2016-03-03 12:28:13 -06:00
-----> Attempt 4/6 Waiting for 10 seconds ...
2015-03-26 18:29:39 -04:00
CHECKS expected result:
http://localhost/ => ""
2015-04-20 16:32:18 -07:00
!
2015-03-26 18:29:39 -04:00
curl: (22) The requested URL returned error: 500 Internal Server Error
2015-04-20 16:32:18 -07:00
! Check attempt 4/6 failed.
2016-03-03 12:28:13 -06:00
-----> Attempt 5/6 Waiting for 10 seconds ...
2015-03-26 18:29:39 -04:00
CHECKS expected result:
http://localhost/ => ""
2015-04-20 16:32:18 -07:00
!
2015-03-26 18:29:39 -04:00
curl: (22) The requested URL returned error: 500 Internal Server Error
2015-04-20 16:32:18 -07:00
! Check attempt 5/6 failed.
2016-03-03 12:28:13 -06:00
-----> Attempt 6/6 Waiting for 10 seconds ...
2015-03-26 18:29:39 -04:00
CHECKS expected result:
http://localhost/ => ""
2015-04-20 16:32:18 -07:00
!
2015-03-26 18:29:39 -04:00
curl: (22) The requested URL returned error: 500 Internal Server Error
Could not start due to 1 failed checks.
2015-04-20 16:32:18 -07:00
! Check attempt 6/6 failed.
2018-04-07 14:13:55 -04:00
=====> node-js-app container output:
2015-03-26 18:29:39 -04:00
=> Booting Thin
=> Rails 4.2.0 application starting in production on http://0.0.0.0:5000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Thin web server (v1.6.3 codename Protein Powder)
Maximum connections set to 1024
Listening on 0.0.0.0:5000, CTRL+C to stop
Started GET "/" for 172.17.42.1 at 2015-03-26 21:36:47 +0000
Is the server running on host "172.17.42.1" and accepting
TCP/IP connections on port 5431?
PG::ConnectionBad (could not connect to server: Connection refused
Is the server running on host "172.17.42.1" and accepting
TCP/IP connections on port 5431?
):
vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `initialize'
vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `new'
vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `connect'
vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:242:in `initialize'
vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `new'
vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `postgresql_connection
2018-04-07 14:13:55 -04:00
=====> end node-js-app container output
2016-06-09 14:28:35 -04:00
/usr/bin/dokku: line 49: 23409 Killed dokku deploy "$APP"
2018-04-07 14:19:14 -04:00
To dokku@dokku .me:myapp
2015-03-26 18:29:39 -04:00
! [remote rejected] dokku -> master (pre-receive hook declined)
2018-04-07 14:19:14 -04:00
error: failed to push some refs to 'dokku@dokku .me:myapp'
2016-07-03 17:13:46 -04:00
```