我一直花费大量时间在谷歌周围寻找如何简单地让轨道显示我的错误,好像我在生产模式(简单地说,我可以验证它确实如我所料) ...
首先我读到你可以将config / environments / development.rb设置为
config.consider_all_requests_local = false
然后在应用程序控制器中执行:
protected
def local_request?
false
end
def rescue_action_in_public(exception)
logger.info("**** LOL ****")
redirect_to :root, :notice => "lol"
end
但是,触发ActiveRecord :: RecordNotFound错误仍会显示堆栈跟踪,并且它不会在我的日志中放置任何内容。
...接下来我读到你必须处于生产模式......所以我试过了......同样的事情......
然后我读到,你需要替换local_request?应用程序控制器中的方法,在config / environments / production.rb中有一个
class ActionDispatch::Request
def local_request?(*args)
false
end
end
所以我这样做..仍然得到堆栈跟踪,没有日志消息..
然后我读到rescue_action_in_public必须在ShowExceptions类中。所以我把它放在config / initializers / error_handling.rb
module ActionDispatch
class ShowExceptions
protected
def rescue_action_in_public(exception)
logger.info("************** WTF ")
status = status_code(exception).to_s
template = ActionView::Base.new(["#{Rails.root}/app/views"])
if ["404"].include?(status)
file = "/errors/404.html.erb"
else
file = "/errors/500.html.erb"
end
body = template.render(:file => file)
render(status, body)
end
end
end
仍然..我得到了一个堆栈跟踪..但我的日志中仍然没有。
答案 0 :(得分:1)
只需在生产模式下运行应用程序:
$ rails server -e production
一切都应该正常。错误也会记录在log/production.log
中(仅在停止服务器后才会显示日志。)
为了使一切正常,您可能首先需要使用
预编译资产$ rake assets:precompile
并更改
config.serve_static_assets = true
在config/environments/production.rb
。