【问题标题】:Rails 4 app on Heroku is 500ing, but no error message in logsHeroku 上的 Rails 4 应用程序是 500ing,但日志中没有错误消息
【发布时间】:2013-04-17 07:06:22
【问题描述】:

我制作了一个新的 Rails 4 beta 应用并将其部署到 Heroku(使用 Ruby 2.0.0,并通过 Procfile 使用 Unicorn)。

它在本地使用foreman start 运行良好,但是当我访问已部署应用程序的主页时,我只收到标准的 Heroku 500 错误:

We're sorry, but something went wrong.
If you are the application owner check the logs for more information.

但是,在日志中,没有错误。我不知道是什么导致了 500。

这是我上次git push heroku master的输出:

Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 656 bytes, done.
Total 4 (delta 2), reused 0 (delta 0)

-----> Ruby/Rails app detected
-----> Using Ruby version: ruby-2.0.0
-----> Installing dependencies using Bundler version 1.3.2
       Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin --deployment
       Using rake (10.0.4)
       Using i18n (0.6.4)
       Using minitest (4.7.3)
       Using multi_json (1.7.2)
       Using atomic (1.1.8)
       Using thread_safe (0.1.0)
       Using tzinfo (0.3.37)
       Using activesupport (4.0.0.beta1)
       Using builder (3.1.4)
       Using erubis (2.7.0)
       Using rack (1.5.2)
       Using rack-test (0.6.2)
       Using actionpack (4.0.0.beta1)
       Using mime-types (1.23)
       Using polyglot (0.3.3)
       Using treetop (1.4.12)
       Using mail (2.5.3)
       Using actionmailer (4.0.0.beta1)
       Using activemodel (4.0.0.beta1)
       Using activerecord-deprecated_finders (0.0.3)
       Using arel (4.0.0)
       Using activerecord (4.0.0.beta1)
       Using coffee-script-source (1.6.2)
       Using execjs (1.4.0)
       Using coffee-script (2.2.0)
       Using json (1.7.7)
       Using rdoc (3.12.2)
       Using thor (0.18.1)
       Using railties (4.0.0.beta1)
       Using coffee-rails (4.0.0)
       Using hike (1.2.2)
       Using jbuilder (1.0.2)
       Using jquery-rails (2.2.1)
       Using kgio (2.8.0)
       Using mysql2 (0.3.11)
       Using bundler (1.3.2)
       Using tilt (1.3.7)
       Using sprockets (2.9.3)
       Using sprockets-rails (2.0.0.rc4)
       Using rails (4.0.0.beta1)
       Using raindrops (0.11.0)
       Using sass (3.2.8)
       Using sass-rails (4.0.0.rc1)
       Using turbolinks (1.1.1)
       Using uglifier (2.0.1)
       Using unicorn (4.6.2)
       Your bundle is complete! It was installed into ./vendor/bundle
       Cleaning up the bundler cache.
-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile
       I, [2013-04-23T22:28:44.559735 #871]  INFO -- : Writing /tmp/build_33m76p0rij8a5/public/assets/rails-d8fb6a2617998f32edf5edb354fc5326.png
       I, [2013-04-23T22:28:49.911890 #871]  INFO -- : Writing /tmp/build_33m76p0rij8a5/public/assets/application-d4a508061cd56ce9e544945495285e0c.js
       I, [2013-04-23T22:28:50.120141 #871]  INFO -- : Writing /tmp/build_33m76p0rij8a5/public/assets/application-a3b89b66a8471f3e75abb239e3b35c7d.css
       Asset precompilation completed (8.30s)
-----> Rails plugin injection
-----> Discovering process types
       Procfile declares types      -> web
       Default types for Ruby/Rails -> console, rake, worker

-----> Compiled slug size: 35.0MB
-----> Launching... done, v21
       http://blofs.herokuapp.com deployed to Heroku

To git@heroku.com:blofs.git
   32e51a2..37d989c  master -> master

以下是该推送的日志:

2013-04-23T22:28:06.650049+00:00 heroku[slugc]: Slug compilation started
2013-04-23T22:29:11.194613+00:00 heroku[api]: Release v21 created by callum.locke@gmail.com
2013-04-23T22:29:11.365908+00:00 heroku[api]: Deploy 37d989c by callum.locke@gmail.com
2013-04-23T22:29:11.441066+00:00 heroku[web.1]: State changed from up to starting
2013-04-23T22:29:11.932952+00:00 heroku[slugc]: Slug compilation finished
2013-04-23T22:29:12.858139+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2013-04-23T22:29:13.194707+00:00 app[web.1]: I, [2013-04-23T22:29:13.194495 #2]  INFO -- : reaped #<Process::Status: pid 5 exit 0> worker=0
2013-04-23T22:29:13.194902+00:00 app[web.1]: I, [2013-04-23T22:29:13.194747 #2]  INFO -- : master complete
2013-04-23T22:29:14.312014+00:00 heroku[web.1]: Process exited with status 0
2013-04-23T22:29:14.338943+00:00 heroku[web.1]: Starting process with command `bundle exec unicorn -p 25281 -E $RACK_ENV`
2013-04-23T22:29:15.717687+00:00 app[web.1]: I, [2013-04-23T22:29:15.717387 #2]  INFO -- : listening on addr=0.0.0.0:25281 fd=7
2013-04-23T22:29:15.717916+00:00 app[web.1]: I, [2013-04-23T22:29:15.717861 #2]  INFO -- : worker=0 spawning...
2013-04-23T22:29:15.721526+00:00 app[web.1]: I, [2013-04-23T22:29:15.721385 #2]  INFO -- : master process ready
2013-04-23T22:29:15.723623+00:00 app[web.1]: I, [2013-04-23T22:29:15.723389 #5]  INFO -- : worker=0 spawned pid=5
2013-04-23T22:29:15.723805+00:00 app[web.1]: I, [2013-04-23T22:29:15.723750 #5]  INFO -- : Refreshing Gem list
2013-04-23T22:29:16.305653+00:00 heroku[web.1]: State changed from starting to up
2013-04-23T22:29:16.891063+00:00 app[web.1]: I, [2013-04-23T22:29:16.890882 #5]  INFO -- : worker=0 ready

之后,我尝试在浏览器中加载主页,日志中仅出现以下两行:

2013-04-23T22:29:26.685651+00:00 heroku[router]: at=info method=GET path=/ host=blofs.herokuapp.com fwd="46.65.16.44" dyno=web.1 connect=2ms service=156ms status=500 bytes=706
2013-04-23T22:29:26.973073+00:00 heroku[router]: at=info method=GET path=/favicon.ico host=blofs.herokuapp.com fwd="46.65.16.44" dyno=web.1 connect=1ms service=5ms status=200 bytes=0

有人知道问题出在哪里吗?

其他可能相关的事情:

  • 我已禁用标准 Heroku Postgres 插件并改用 ClearDB MySQL 插件。
  • 我已经尝试手动将DATABASE_URL 环境变量从以前的值(即使我删除了postgres 插件后仍然是postgres URL)更改为与CLEARDB_DATABASE_URL var(mysql 变量)相同的值。这似乎没有任何区别。
  • 我已将ruby '2.0.0' 添加到我的Gemfile,并添加了mysql2unicorn gems。我使用了https://devcenter.heroku.com/articles/rails-unicorn 建议的config/unicorn.rb
  • 我的 Procfile 仅包含:web: bundle exec unicorn -p $PORT -E $RACK_ENV
  • 在本地使用 foreman start 可以正常工作。
  • 除了上述修改之外,它基本上是使用rails new 创建的开箱即用应用程序。

【问题讨论】:

标签: ruby-on-rails heroku ruby-on-rails-4


【解决方案1】:

您需要将gem 'rails_12factor' 添加到您的 Gemfile。这是 Heroku 的一个临时修复程序,以使 Rails 4+ 与他们的服务一起工作。

Getting Started with Rails 4.x on HerokuGetting Started with Rails 5.x on Heroku

【讨论】:

  • 你应该接受这个答案,因为它很可能是解决你问题的关键。
  • 确保在您的 production.rb 中更改 config.log_level = :debug 以获得完整的调试日志。
  • 这对我有用!我首先添加了那个 gem,然后我得到了一个更详细的日志错误。然后我运行heroku run rake db:migrate,之后应用就可以运行了!
  • 不能太临时。我刚刚创建了一个新的 rails 应用程序,推送到 heroku,并且遇到了同样的问题(空日志)。添加rails_12factor 解决了它。
【解决方案2】:

这些答案告诉您如何打开日志以便查找错误,但并没有真正回答“什么可能出了问题?”这个问题。

除了@Lauren 对this question 的回答中的建议之外,还有另一种可能性——如果您尝试在生产环境中访问ENV 常量并且没有通过heroku config:set 设置它,这也会导致一个非常安静的 500 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多