简体   繁体   中英

Rails Unicorn Web Server Won't Start on Heroku

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

  • Ruby 1.9.3p392 (when I run Ruby -v in my dev terminal this is what is returned, however the Heroku logs seem to indicate Ruby 2.0.0)
  • Rails 3.2.13
  • Unicorn Web Server
  • Postgresql DB

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM