diff --git a/Procfile b/Procfile index 6a153b3..063fee6 100644 --- a/Procfile +++ b/Procfile @@ -1 +1,2 @@ -web: bundle exec rails server -p 3000 +web: bundle exec puma -C config/puma.rb +worker: rails jobs:work diff --git a/README.md b/README.md index e9f0188..a4d2ebe 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ within Slack, and many more useful features. ## Deploy to Heroku -- [ ] TODO: add "Deploy to Heroku" button. +[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) ## Developing diff --git a/app.json b/app.json new file mode 100644 index 0000000..0933cec --- /dev/null +++ b/app.json @@ -0,0 +1,21 @@ +{ + "name": "Storm", + "description": "Self-hosted website monitoring", + "repository": "https://github.com/ProctorU/storm.git", + "logo": "https://s3-us-west-2.amazonaws.com/dev-team-resources/storm-wordmark.svg", + "keywords": ["monitoring", "storm", "slack", "rails"], + "env": { + "RACK_ENV": { + "value": "production" + }, + "PORT": { + "value": "3000" + }, + "RAILS_MAX_THREADS": { + "value": 5 + }, + "WEB_CONCURRENCY": { + "value": 2 + } + } +} diff --git a/config/puma.rb b/config/puma.rb index 1e19380..25ba7be 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -1,56 +1,15 @@ -# Puma can serve each request in a thread from an internal thread pool. -# The `threads` method setting takes two numbers: a minimum and maximum. -# Any libraries that use thread pools should be configured to match -# the maximum value specified for Puma. Default is set to 5 threads for minimum -# and maximum; this matches the default thread size of Active Record. -# -threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } +workers Integer(ENV['WEB_CONCURRENCY'] || 2) +threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5) threads threads_count, threads_count -# Specifies the `port` that Puma will listen on to receive requests; default is 3000. -# -port ENV.fetch("PORT") { 3000 } +preload_app! -# Specifies the `environment` that Puma will run in. -# -environment ENV.fetch("RAILS_ENV") { "development" } +rackup DefaultRackup +port ENV['PORT'] || 3000 +environment ENV['RACK_ENV'] || 'development' -# Specifies the number of `workers` to boot in clustered mode. -# Workers are forked webserver processes. If using threads and workers together -# the concurrency of the application would be max `threads` * `workers`. -# Workers do not work on JRuby or Windows (both of which do not support -# processes). -# -# workers ENV.fetch("WEB_CONCURRENCY") { 2 } - -# Use the `preload_app!` method when specifying a `workers` number. -# This directive tells Puma to first boot the application and load code -# before forking the application. This takes advantage of Copy On Write -# process behavior so workers use less memory. If you use this option -# you need to make sure to reconnect any threads in the `on_worker_boot` -# block. -# -# preload_app! - -# If you are preloading your application and using Active Record, it's -# recommended that you close any connections to the database before workers -# are forked to prevent connection leakage. -# -# before_fork do -# ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord) -# end - -# The code in the `on_worker_boot` will be called if you are using -# clustered mode by specifying a number of `workers`. After each worker -# process is booted, this block will be run. If you are using the `preload_app!` -# option, you will want to use this block to reconnect to any threads -# or connections that may have been created at application boot, as Ruby -# cannot share connections between processes. -# -# on_worker_boot do -# ActiveRecord::Base.establish_connection if defined?(ActiveRecord) -# end -# - -# Allow puma to be restarted by `rails restart` command. -plugin :tmp_restart +on_worker_boot do + # Worker specific setup for Rails 4.1+ + # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot + ActiveRecord::Base.establish_connection +end