Rails完整错误页面不显示视图错误

7

我有一个名为new.html.erb的视图,其中包含以下代码:

<%= some_non_existent_thing.imaginary_method %>

现在,我只看到一个简单的500错误页面,就像这样:

500 Internal Server Error
如果您是此网站的管理员,请阅读此Web应用程序的日志文件和/或Web服务器的日志文件,以查找出错原因。

难道我不应该看到一个漂亮格式化的页面,并带有关于异常的一些信息吗?
我不确定我有没有错过什么,但我相信当视图出现问题时,Rails曾经在开发环境中显示完整的错误页面。

3
发生这种情况是在你的开发环境或类似Heroku这样的地方吗? - Yosep Kim
4个回答

7

你确定你正在运行开发环境吗?检查一下RAILS_ENV=development或者你是否运行了rails server -e development

然后检查一下你的development.rb文件,确保它包含以下行:

config.consider_all_requests_local = true

1
如果你在异常中有一个内部异常,Rails有一个中间件可以捕获它并返回一个FAILSAFE_RESPONSE和以下的副本

500 内部服务器错误 如果您是此网站的管理员,请阅读此Web应用程序的日志文件和/或Web服务器的日志文件以找出出了什么问题。

一个好的排除故障的方法是将您的自定义错误代码与Rails 4.2.0指南中提供的示例代码进行比较。
我指向那特定的版本,因为整个部分在Rails 5.0.0指南中被删除。
理想情况下,您应该尽可能使错误视图、布局和控制器不带逻辑,以避免遇到此问题。

0

发生这种情况是因为代码无法编译,例如如果您的if语句缺少end。


2
在开发过程中,应该显示异常而不是500错误页面。 - felipero

0
首先,正如安东在下面的答案中提到的那样,请确认您的config/environments/development.rb文件中是否有以下内容:
config.consider_all_requests_local = true

请确保您正在开发模式下运行服务器。

我已经确认了上述内容,但仍然观察到错误。 在我的情况下,这是因为我的记录器出现了一些错误。我使用了自定义日志格式化程序,它使用了String#%方法来格式化日志。%似乎非常有问题,会导致所有这些奇怪的错误。我通过在控制器方法中添加一个debugger行并进入隐式渲染函数调用来解决了这个问题。它遇到了错误,并报告了一个格式不正确的格式字符串错误。

这是我之前使用的日志格式化程序,它导致了错误[我将其添加到了初始化文件中]:

class Logger::SimpleFormatter
  def call(severity, time, progname, msg)
    "%-7s #{msg}\n" % severity
  end
end

这些修改修复了错误:

class Logger::SimpleFormatter
  def call(severity, time, progname, msg)
    severity_prefix = "[#{severity}]".ljust(7)
    "#{severity_prefix} #{msg}\n"
  end
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接