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

Ruby on rails Heroku上的Rails应用程序-状态500错误=>;空白白页,ruby-on-rails,ruby,heroku,ruby-on-rails-4,Ruby On Rails,Ruby,Heroku,Ruby On Rails 4,我在Heroku staging服务器上有一个Rails应用程序,除了错误页面不工作外,一切都很顺利。每次我得到一个“status:500”错误,它都会导致一个空白的白色页面,而不是500.html静态错误页面 我在my_app/public文件夹中有一个静态500.html页面,如果我尝试直接通过myapp.herokuapp.com/500访问它,我可以在heroku中访问它。到时天气会好的。但是如果我在程序中得到一个真正的“status:500”错误,它将不会呈现500.html页面。。。

我在Heroku staging服务器上有一个Rails应用程序,除了错误页面不工作外,一切都很顺利。每次我得到一个“status:500”错误,它都会导致一个空白的白色页面,而不是500.html静态错误页面

我在my_app/public文件夹中有一个静态500.html页面,如果我尝试直接通过myapp.herokuapp.com/500访问它,我可以在heroku中访问它。到时天气会好的。但是如果我在程序中得到一个真正的“status: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">
看起来这不应该是那些“棘手的问题”之一。。。没有找到任何与我的问题直接相关的帖子或文章,这让我觉得我的问题一定是空洞的。我目前正在运行Ruby 2.0.0p451和Rails 4.1.1。我通过heroku设置了岗哨来监控错误。如果我能提供任何其他有用的信息,请告诉我

编辑 我应该提到,我的GEM文件如下所示:

  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'rails_12factor'放在了适合于登台和生产环境的正确组中,正如在关于使用Rails4为heroku中的静态资产提供服务中所述。。。基本上是错误页面将要做的事情。 我将应用程序设置为通过Unicorn运行多个进程,并将Unicorn临时设置为在应用程序测试期间在内部处理Sidekiq进程(以避免第二次动态)。还运行Redis

config/environments/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

我终于弄清了问题的真相。 结论是,在没有任何自定义类的普通Rails应用程序中发生状态错误(404500等)时,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!
所以,我可能误解了sentry raven的文档&将其错误地合并到Rails应用程序配置中,或者其他一些东西,但问题就是这样。
因此,如果您的Heroku托管的Rails应用程序运行良好,然后在出现任何状态错误时运行到“白色死亡屏幕”,那么您还需要检查您的诊断尝试

类似的问题:是的,我认为这主要是为了解决heroku的错误。我的问题是关于我的内部Rails应用程序错误。提到设置一个exceptions_应用程序,但是Rails是否应该能够提供一个简单的静态状态:在生产模式下,如果没有它,500错误页面?我不想在控制器中寻找任何自定义的错误处理——一个简单的香草Rails错误页面就足够了。如果您将
考虑所有请求\u local
设置为true,那么rails将提供一个错误页面。根据,我认为在生产环境中将其设置为
true
不是一个好主意,因为它会“使详细的调试信息转储到HTTP响应中,Rails::Info控制器将在/Rails/Info/properties中显示应用程序运行时上下文。”然后,您唯一的方法是在应用程序中为生产设置自定义错误页。
config.action_dispatch.show_exceptions = true #status error pages work again!