我无法让我的应用程序在 Heroku 成功启动。这是基础知识:
- Ruby 1.9.3p392 (当我在我的开发终端中运行 Ruby -v 这是返回的内容,但是 Heroku 日志似乎表明 Ruby 2.0.0)
- 导轨 3.2.13
- 独角兽网络服务器
- PostgreSQL 数据库
我已将我的应用程序部署到 Heroku,但收到“应用程序发生错误,无法提供您的页面”。
这是 Heroku 日志中的最终条目:
+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
当我尝试运行 Heroku ps 时,我得到:
=== web (1X): `bundle exec unicorn -p $PORT -c ./config/unicorn.rb`
web.1: crashed 2013/06/22 17:31:22 (~ 6m ago)
我认为问题可能源于我的 app/config/application.rb 中的这一行
ENV.update YAML.load(File.read(File.expand_path('../application.yml', __FILE__)))
此行在 dev 中用于从我的 application.yml 文件中读取我的环境变量很有用。但是,出于安全目的,我从我的 repo 中 gitignore 并且可以看到 Heroku 日志抱怨找不到该文件。对于生产,我通过以下方式在 Heroku 设置了我的环境变量:
heroku config:add SECRET_TOKEN=a_really_long_number
这是我的 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
这是我的Procfile
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
我的 app/config/unicorn.rb 和 Procfile 设置都来自https://devcenter.heroku.com/articles/rails-unicorn
根据一些 IRC 指导,我安装了 Figaro,但可惜没有解决问题。
如果您想查看完整的应用程序,它发布在:https ://github.com/mxstrand/mxspro
如果您对可能出现的问题或我如何进一步排除故障有指导,我将不胜感激。谢谢你。