对于rescue_action_in_public非常沮丧

时间:2011-09-08 21:05:40

标签: ruby-on-rails ruby-on-rails-3

我一直花费大量时间在谷歌周围寻找如何简单地让轨道显示我的错误,好像我在生产模式(简单地说,我可以验证它确实如我所料) ...

首先我读到你可以将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

仍然..我得到了一个堆栈跟踪..但我的日志中仍然没有。

1 个答案:

答案 0 :(得分:1)

只需在生产模式下运行应用程序:

$ rails server -e production

一切都应该正常。错误也会记录在log/production.log中(仅在停止服务器后才会显示日志。)

为了使一切正常,您可能首先需要使用

预编译资产
$ rake assets:precompile

并更改

config.serve_static_assets = true

config/environments/production.rb