【问题标题】:How to test 500.html in rails development env?如何在 Rails 开发环境中测试 500.html?
【发布时间】:2010-11-11 16:10:53
【问题描述】:

我想使用开发环境在我的 Rails 应用程序中测试 500 个错误页面。

我已经在config/environments/development.rb 中尝试过这个:

config.action_controller.consider_all_requests_local = false

但这似乎没有任何效果。

【问题讨论】:

  • 将您的环境更改为生产帮助吗?
  • 我个人认为最好切换到生产环境来测试错误页面。如果您在开发过程中总是禁用 Rails 的内置错误页面,则可能会使查看有价值的调试信息变得更加困难。

标签: ruby-on-rails development-environment


【解决方案1】:

到目前为止,我发现这样做的唯一方法是设置development.rb

config.consider_all_requests_local = false

现在,重新启动服务器。

然后使用我的本地 IP 地址访问 URL:http://192.168.1.135:3000/blah

提到的其他设置似乎没有任何效果。

【讨论】:

  • 也适用于 Rails 4。顺便说一句,它也适用于我,使用 127.0.0.1:3000/page_which_does_not_exist 或 localhost:3000/page_which_does_not_exist
  • 对我不起作用。我没有得到路由匹配,而是内部服务器错误。
  • 设置config.consider_all_requests_local = false后别忘了重启服务器。
【解决方案2】:

建议的解决方案都不适用于我的 Rails 3 应用程序。对我来说,快速而肮脏的解决方案是直接点击错误页面来查看呈现的 HTML。例如,

http://0.0.0.0:3000/404.html

http://0.0.0.0:3000/500.html

【讨论】:

  • 它对我不起作用。我收到 500 错误页面,但我看到它正在被 rails 服务器或开发日志记录。
【解决方案3】:

只需发送http://localhost:3000/404 或 /500 即可访问这些页面并查看它们的外观。

【讨论】:

  • 对于只想测试这些页面设计的人来说,这是最短和最好的答案
【解决方案4】:

您可以:

  1. 使用 localhost 或 127.0.0.1 以外的地址访问应用程序,rails 默认认为是本地请求
  2. application_controller.rb 中的local_request? 覆盖为类似:
def local_request?
  false
end

第二个将停止 Rails 将来自 localhost 和 127.0.0.1 的请求视为本地请求,结合 consider_all_requests_local = false 应该会显示您的 500.html 页面。

【讨论】:

  • 对于那些来自 Google 并使用 Rails 3 的人,请查看下一个答案。
【解决方案5】:

除了设置: config.consider_all_requests_local = false 我还需要设置: config.action_dispatch.show_exceptions = true

【讨论】:

  • 请注意,这应该在服务器启动之前设置,之后没有效果(= 可能不适合需要两种行为的自动测试)
【解决方案6】:

您应该将以下几行添加到 application_controller,

unless  ActionController::Base.consider_all_requests_local
    rescue_from Exception, :with => :render_500
    if  ActiveRecord::RecordNotFound
      rescue_from Exception, :with => :render_404
    end
    rescue_from ActionController::RoutingError, :with => :render_404
    rescue_from ActionController::UnknownController, :with => :render_404
    rescue_from ActionController::UnknownAction, :with => :render_404
end

然后尝试使用以下设置运行。

config.action_controller.consider_all_requests_local = falseconfig/environments/development.rb:

它会起作用的。请不要忘记在 application_controller.rb 中编写函数来呈现每个错误消息的布局。

【讨论】:

  • 您也可以只使用控制器顶部的rescue_from 指令,如guides.rubyonrails.org/…
  • ActionController::UnknownAction 不再存在
【解决方案7】:

我认为旋转的正确设置是这样的:

config.action_view.debug_rjs = false

为什么它仍然被标记为 rjs 并不完全清楚。

【讨论】:

  • 这对我也没有任何影响
【解决方案8】:

如果你只是想强制一个 500 错误来看看它的样子,你可以把它添加到一个视图中:

haml 示例:

= render :partial => "broken", :status => 500

【讨论】:

  • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
猜你喜欢
  • 2011-02-13
  • 2011-11-27
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 2012-10-16
相关资源
最近更新 更多