我正在开发升级到 Rails 5.1 的应用程序,当发生内部服务器错误时,我收到异常消息,但没有堆栈跟踪。例如:
Completed 500 Internal Server Error in 25ms (ActiveRecord: 13.5ms)
NoMethodError - undefined method `performer' for #<AssignSiteToStudy::Form>
Did you mean? performer_id:
标准输出或开发日志文件中没有更多信息。
经过一番调查,似乎问题出现在 better_errors gem 中,特别是Rails.backtrace_cleaner.clean
删除了回溯的所有行:
# better_errors-2.5.0/lib/better_errors/middleware.rb:
def backtrace_frames
if defined?(Rails) && defined?(Rails.backtrace_cleaner)
Rails.backtrace_cleaner.clean @error_page.backtrace_frames.map(&:to_s)
else
@error_page.backtrace_frames
end
end
更新:实际错误发生在位于 Rails 根目录之外的引擎中。它在 Gemfile 中被引用path
,例如gem "my_engine", path: '~/dev/my_engine
.