mxs
mxs

Reputation: 645

Rails Unicorn Web Server Won't Start on Heroku

I can't get my app to successfully start at Heroku. Here's the basics:

I have deployed my app to Heroku but getting "An error occurred in the application and your page could not be served."

Here's the final entries in the Heroku log:

+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.0.0/bin/unicorn:23:in `<main>'
+00:00 heroku[web.1]: Process exited with status 1
+00:00 heroku[web.1]: State changed from starting to crashed

When I try to run Heroku ps, I get:

=== web (1X): `bundle exec unicorn -p $PORT -c ./config/unicorn.rb`
web.1: crashed 2013/06/22 17:31:22 (~ 6m ago)

I think it's possible the problem is stemming from this line in my app/config/application.rb

ENV.update YAML.load(File.read(File.expand_path('../application.yml', __FILE__)))

This line is useful in dev to read my environment variables from my application.yml file. However, for security purposes I gitignore it from my repo and can see the Heroku logs complain that this file not being found. For production, I have set my environment variables at Heroku via:

heroku config:add SECRET_TOKEN=a_really_long_number

Here's my app/config/unicorn.rb

# config/unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

And here's my Procfile

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

Both my app/config/unicorn.rb and Procfile settings come from https://devcenter.heroku.com/articles/rails-unicorn

Based on some IRC guidance, I installed Figaro, but alas that did not resolve the issue.

If you want to see the full app, it's posted at: https://github.com/mxstrand/mxspro

If you have guidance on what might be wrong or how I might troubleshoot further I'd appreciate it. Thank you.

Upvotes: 3

Views: 1245

Answers (1)

John Beynon
John Beynon

Reputation: 37507

You're spot on with you analysis. I've just pulled your code, made some tweaks and now have it started on Heroku.

My only changes;

config/application.rb - moved lines 12 & 13 to config/environments/development.rb - if you're using application.yml for development environment variables then keep it that way. Other option is to make line 13 conditional to your development environment with if Rails.env.development? at the end.

config/environments/production.rb - line 33 missing preceeding # mark

Upvotes: 1

Related Questions