Heroku
This tutorial assumes that you have already managed to clone CONSUL on your machine and gotten it to work.
- 1.
- 2.
heroku login
- 3.Go to your CONSUL repository and instantiate the process
cd consul
heroku create your-app-name
You can add the flag
--region eu
if you want to use their European servers instead of the US ones.If your-app-name is not already taken, Heroku should now create your app.
- 4.Create a database using
heroku addons:create heroku-postgresql
You should now have access to an empty Postgres database whose address was automatically saved as an environment variable named DATABASE_URL. CONSUL will automatically connect to it when deployed.
- 5.(Not needed) Add a file name heroku.yml at the root of your project and paste the following in it
build:
languages:
- ruby
packages:
- imagemagick
run:
web: bundle exec rails server -e ${RAILS_ENV:-production}
- 6.Now, generate a secret key and save it to an ENV variable named SECRET_KEY_BASE using
heroku config:set SECRET_KEY_BASE=$(rails secret)
Also add your server address:
heroku config:set SERVER_NAME=myserver.address.com
You need to let the app know where the configuration variables are stored by adding a link to the ENV variables in config/secrets.yml
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
server_name: <%= ENV["SERVER_NAME"] %>
and commit this file in the repo by commenting out the corresponding line in the .gitignore.
#/config/secrets.yml
Remember not to commit the file if you have any sensitive information in it!
- 7.You can now push your app using
git push heroku your-branch:master
- 8.It won't work straight away because the database doesn't contain the tables needed. To create them, run
heroku run rake db:migrate
heroku run rake db:seed
If you want to add the test data in the database, move
gem 'faker', '~> 1.8.7'
outside of group :development
and runheroku config:set DATABASE_CLEANER_ALLOW_REMOTE_DATABASE_URL=true
heroku config:set DATABASE_CLEANER_ALLOW_PRODUCTION=true
heroku run rake db:dev_seed
- 9.Your app should now be ready to use. You can open it with
heroku open
You also can run the console on heroku using
heroku console --app your-app-name
- 10.Heroku doesn't allow to save images or documents in its servers, so it's necessary to setup a permanent storage space.
Add the SendGrid add-on in Heroku. It will create a SendGrid account for you with
ENV["SENDGRID_USERNAME"]
and ENV["SENDGRID_PASSWORD"]
.Add this to
config/secrets.yml
, under the production:
section: mailer_delivery_method: :smtp
smtp_settings:
:address: "smtp.sendgrid.net"
:port: 587
:domain: "heroku.com"
:user_name: ENV["SENDGRID_USERNAME"]
:password: ENV["SENDGRID_PASSWORD"]
:authentication: "plain"
:enable_starttls_auto: true
Important: Turn on one worker dyno so that emails get sent.
The rails_12factor is only useful if you use a version of CONSUL older than 1.0.0. The latter uses Rails 5 which includes the changes.
As recommended by Heroku, you can add the gem rails_12factor and specify the version of Ruby you want to use. You can do so by adding
gem 'rails_12factor'
ruby 'x.y.z'
in the file Gemfile_custom, where
x.y.z
is the version defined in the .ruby-version
file in the CONSUL repository. Don't forget to runbundle install
to generate Gemfile.lock before committing and pushing to the server.
If you want to allow more concurrency, uncomment the line:
workers ENV.fetch("WEB_CONCURRENCY") { 2 }
The last part is to change the web task to use Puma by changing it to this in your heroku.yml file:
web: bundle exec puma -C config/puma.rb
The free and hobby versions of Heroku are barely enough to run an app like CONSUL. To optimise the response time and make sure the app doesn't run out of memory, you can change the number of workers and threads that Puma uses.
My recommended settings are one worker and three threads. You can set it by running these two commands:
heroku config:set WEB_CONCURRENCY=1
heroku config:set RAILS_MAX_THREADS=3
I also recommend to set the following:
heroku config:set RAILS_SERVE_STATIC_FILES=enabled
heroku config:set RAILS_ENV=production
Last modified 27d ago