【问题标题】:How to disable Rails RoutingError stacktrace printout in Production log files?如何在生产日志文件中禁用 Rails RoutingError 堆栈跟踪打印输出?
【发布时间】:2011-07-20 04:10:17
【问题描述】:

在我的骄傲 Rails 应用程序中,我遇到了各种类型的随机攻击,要求获取 asp、zip 和 rar 文件。 Rails 按预期呈现 404 页面,但我的生产日志文件被 RoutingError 堆栈跟踪转储卡住,如下所示。

我的问题是:我可以在 Apache/Passenger 中阻止具有特定模式的 URL 吗?或者至少我可以将 Rails 配置为只记录错误本身而不打印整个堆栈跟踪?谢谢!

Processing ApplicationController#index (for 100.222.237.7 at 2011-03-22 10:59:54) [GET]

ActionController::RoutingError (No route matches "/include/upfile_flash.asp" with {:host=>"www.myhost.com", :method=>:get, :domain=>"myhost.com", :subdomain=>"www"}):
  passenger (2.2.15) lib/phusion_passenger/rack/request_handler.rb:92:in `process_request'
  passenger (2.2.15) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop'
  passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:441:in `start_request_handler'
  passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:381:in `handle_spawn_application'
  passenger (2.2.15) lib/phusion_passenger/utils.rb:252:in `safe_fork'
  passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:377:in `handle_spawn_application'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:163:in `start'
  passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:222:in `start'
  passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:253:in `spawn_rails_application'
  passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add'
  passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:247:in `spawn_rails_application'
  passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:80:in `synchronize'
  passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
  passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:246:in `spawn_rails_application'
  passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:145:in `spawn_application'
  passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:278:in `handle_spawn_application'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'

Rendering /myapp/public/404.html (404 Not Found)

【问题讨论】:

    标签: ruby-on-rails logging stack-trace production


    【解决方案1】:

    Rails 4 和 5 答案:

    match '*any', to: 'not_found#anything', via: [:get, :post]
    

    要匹配通配符参数,必须为其分配一个名称 - 在本例中为 any

    class NotFoundController < ApplicationController
      def anything
        Logger.new('log/not_found.log').info(request.fullpath)
        # To render nothing:
        # head :not_found #Rails 5
        # render nothing: true, status: :not_found # for Rails 4
    
        #To render 404 page
        render file: 'public/404.html', status: :not_found, layout: false
      end
    end
    

    【讨论】:

      【解决方案2】:

      您可以在所有其他可以捕获这些内容并呈现您选择的控制器/动作的路线之后添加一条全部捕获路线:

      match '*' => 'errors#not_found'
      

      您甚至可以选择仅匹配 .asp 或任何您想要的:

      match '*.:format' => 'errors#not_found', :constraints => {:format => /(asp|zip|rar)/i}
      

      【讨论】:

        猜你喜欢
        • 2012-04-19
        • 2015-07-01
        • 2019-05-19
        • 1970-01-01
        • 1970-01-01
        • 2021-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多