Heroku上的Rails应用程序 - 状态500错误=>空白的白页

时间:2014-08-24 04:27:00

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

我在Heroku登台服务器上有一个Rails应用程序,除了错误页面没有工作外,一切都很顺利。每当我获得"状态:500"错误,它会导致空白页面,而不是500.html静态错误页面。

我在my_app / public文件夹中有一个静态500.html页面,如果我尝试通过myapp.herokuapp.com/500直接访问,我可以在heroku中访问它。它会显示正常。但如果我得到一个真实的状态:500"程序中的错误,它不会呈现500.html页面...而是呈现一个空白的白页。

要创建错误,我尝试转到不存在的页面。 日志表明"状态:500"错误已经发生,但再次,白页。以下是日志输出的一部分:

heroku[router]: at=info method=GET path="/fakepage" host=myapp.herokuapp.com request_id=20825-b474-4e-37f-c52486140 fwd="67.xxx.xxx.x" dyno=web.1 connect=1ms service=108ms status=500 bytes=949
Started GET "/fakepage" for xx.xxx.xxx.x at 2014-08-24 03:50:31 +0000
app[web.1]: ** [Raven] User excluded error: #<ActionController::RoutingError: No route matches [GET] "/fakepage">

config / environment / staging.rb 中,我有以下内容:

config.consider_all_requests_local = false
config.serve_static_assets = true  #after the default of false didn't work

看起来这不应该是其中一个&#34;棘手的问题&#34; ...而且没有找到任何与我的问题直接相关的先前帖子或文章让我认为它必须是一些内容对我而言。我目前正在运行Ruby 2.0.0p451&amp; Rails 4.1.1。我通过heroku安装了Sentry来监控错误。如果我能提供任何其他有用的信息,请告诉我。

修改 我应该提一下,我的Gemfile看起来像这样:

  source 'https://rubygems.org'
  ruby '2.0.0'
  gem 'rails' #, '4.1.1'

  gem 'bcrypt'
  gem 'bootstrap_form'
  gem 'bootstrap-sass'
  gem 'carrierwave'                 
  gem 'coffee-rails'
  gem 'dropzonejs-rails'
  gem 'email_validator'             
  gem 'fog'                         
  gem 'geocoder'
  gem 'haml-rails'
  gem 'jquery-rails'
  gem 'jquery-turbolinks'
  gem 'jquery-ui-rails'
  gem 'mini_magick'                 
  gem 'paratrooper'                
  gem 'sass-rails'
  gem 'sidekiq'                     
  gem 'sinatra', require: nil       
  gem 'turbolinks'
  gem 'uglifier'
  gem 'unicorn'

  group :production, :staging do
    gem 'pg'
    gem 'rails_12factor'
    gem 'sentry-raven'
  end

也就是说,我确实拥有了gem&#39; rails_12factor&#39;在正确的分组中进行分期和a similar question中提到的关于使用Rails4在heroku中提供静态资产的生产环境......本质上是一个错误页面将要做的事情。 我有应用程序设置通过Unicorn运行多个进程,并且让Unicorn临时设置以在应用程序测试时内部处理Sidekiq进程(以避免第二个dyno)。还运行Redis。

配置/环境/ staging.rb

Rails.application.configure do
  config.cache_classes = true
  config.eager_load    = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  config.serve_static_assets  = true
  config.assets.js_compressor = :uglifier
  config.assets.compress = true
  config.assets.compile  = true #WAS FALSE
  config.assets.digest   = true
  config.assets.version  = '1.0'

  config.action_mailer.default_url_options = { host: "..." }
  config.action_mailer.delivery_method = :smtp
  ActionMailer::Base.smtp_settings = {
    :port           => ENV['MAILGUN_SMTP_PORT'    ],
    :address        => ENV['MAILGUN_SMTP_SERVER'  ],
    :user_name      => ENV['MAILGUN_SMTP_LOGIN'   ],
    :password       => ENV['MAILGUN_SMTP_PASSWORD'],
    :domain         => '...',
    :authentication => :plain }

  config.log_level = :info #see everything in the log
  config.i18n.fallbacks = true
  config.log_formatter = ::Logger::Formatter.new
  config.action_dispatch.show_exceptions = false #per sentry-raven docs
  config.active_record.dump_schema_after_migration = false
  config.active_support.deprecation = :notify #send to registered listeners

1 个答案:

答案 0 :(得分:3)

我终于找到了问题的根源。 结论是,当没有任何自定义类的vanilla Rails应用程序中发生状态错误(404,500等)时,Heroku将提供基本错误页面。在我确定之后,它有助于指导诊断。

查看config / environments / staging.rb代码,我看到他们的文档中规定的sentry-raven的LOC应该设置为false:

config.action_dispatch.show_exceptions = false #per sentry-raven docs

将此设置恢复为true后,状态错误页面开始正常运行:

config.action_dispatch.show_exceptions = true #status error pages work again!

所以,我可能误解了哨兵 - 乌鸦的文档&amp;将它错误地合并到Rails应用程序配置中,或其他方式,但这就是问题的结果。 所以,如果您的Heroku托管Rails应用程序运行良好,然后在任何状态错误时进入“死亡白屏”,这是检查您的诊断尝试的另一件事。