【问题标题】:Hide ActionController::RoutingError in logs for assets在资产日志中隐藏 ActionController::RoutingError
【发布时间】:2016-02-22 23:58:09
【问题描述】:

我正在开发一个具有 WP 主页的 Rails 应用程序,以及一些从 WP 加载的图像。在 localhost 上,我们无法访问导致日志中出现大量路由错误的 WP 内容,例如:

Started GET "/wp-content/uploads/2014/03/facebook-icon1.png" for 127.0.0.1 at 2015-11-20 15:10:48 +0200

ActionController::RoutingError (No route matches [GET] "/wp-content/uploads/2014/03/facebook-icon1.png"):
  actionpack (4.2.5) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (4.2.5) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'

考虑到页面上有 5 张图片,每个请求最终都会出现 5 个路由错误。 如何在开发环境的日志中隐藏这些类型的错误?

【问题讨论】:

  • 试试这个:config.assets.logger = nil
  • @PardeepDhingra 不起作用

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

有这个确切的问题。在您的初始化程序文件夹中创建一个 logger.rb 文件并添加以下代码:

# spammers were blowing up our logs
# this suppresses routing errors
if Rails.env.production?
    class ActionDispatch::DebugExceptions
      alias_method :old_log_error, :log_error
      def log_error(env, wrapper)
        if wrapper.exception.is_a?  ActionController::RoutingError
          return
        else
          old_log_error env, wrapper
        end
      end
    end
end

【讨论】:

  • 删除条件“if Rails.env.production?”它会抑制所有环境中的路由错误。
  • 我只需要这个用于开发,所以我使用了if Rails.env.development?。此外,正如您在我在上面发布的要点中看到的那样,它仍然会生成日志,比我承认之前要短,但仍然有一些痕迹。有机会完全删除它们.. 让我们只说请求.. 谢谢。
  • 是的,这段代码很容易适应过滤掉你想要的任何日志类型,或者你可以将它更改为只记录某些类型。如果您花一点时间阅读代码,您可以看到它决定在不记录的情况下返回的位置,或者继续将信息发送到日志。改变以适应。
【解决方案2】:

也许这个silencer gem 可以帮助你。

用法:

在您的环境中:

require 'silencer/logger'

config.middleware.swap Rails::Rack::Logger, Silencer::Logger, :silence => [%r{^/wp-content/}]

【讨论】:

  • 你能更准确一点吗?它究竟是做什么的?原版海报需要如何使用?等等,请添加代码示例。
  • 不,我什至试图让所有的 GET 请求静音以测试这是否有效。
  • 很抱歉听到这个消息。我安装了这个 gem,将配置添加到我的 application.rb 中,它对我来说效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
相关资源
最近更新 更多