Skip to content

A starter application based on Ruby 2.4, Rails 4.2 and Bootstrap for Sass 3, deployable on Heroku

License

Notifications You must be signed in to change notification settings

diowa/ruby2-rails4-bootstrap-heroku

Repository files navigation

Rails 4 Starter App

Build Status Code Climate Coverage Status

Deploy

This is a starter web application based on the following technology stack:

Starter App is deployable on Heroku. Demo: https://ruby2-rails4-bootstrap-heroku.herokuapp.com/

Gemfile also contains a set of useful gems for performance, security, api building...

Thread safety

We assume that this application is thread safe. If your application is not thread safe or you don't know, please set the minimum and maximum number of threads usable by puma on Heroku to 1:

$ heroku config:set RAILS_MAX_THREADS=1

Heroku Platform API

This application supports fast setup and deploy via app.json:

$ curl -n -X POST https://api.heroku.com/app-setups \
-H "Content-Type:application/json" \
-H "Accept:application/vnd.heroku+json; version=3" \
-d '{"source_blob": { "url":"https://github.com/diowa/ruby2-rails4-bootstrap-heroku/tarball/main/"} }'

More information: Setting Up Apps using the Platform API

Recommended add-ons

Heroku's Production Check recommends the use of the following add-ons, here in the free version:

$ heroku addons:create newrelic:wayne # App monitoring
$ heroku config:set NEW_RELIC_APP_NAME="Rails 4 Starter App" # Set newrelic app name
$ heroku addons:create papertrail:choklad # Log monitoring

Secrets.yml

Rails 4.1.0 introduced secrets.yml. Heroku automatically sets a proper configuration variable in new applications. Just in case you need, the command line is:

$ heroku config:add SECRET_KEY_BASE="$(bundle exec rake secret)"

NOTE: If you need to migrate old cookies, please read the above guide.

Tuning Ruby's RGenGC

Generational GC (called RGenGC) was introduced from Ruby 2.1.0. RGenGC reduces marking time dramatically (about x10 faster). However, RGenGC introduce huge memory consumption. This problem has impact especially for small memory machines.

Ruby 2.1.1 introduced new environment variable RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR to control full GC timing. By setting this variable to a value lower than the default of 2 (we are using the suggested value of 1.3) you can indirectly force the garbage collector to perform more major GCs, which reduces heap growth.

$ heroku config:set RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.3

More information: Change the full GC timing