【问题标题】:Rails app logging duplicate requestsRails 应用程序记录重复请求
【发布时间】:2010-07-16 14:42:56
【问题描述】:

我有一个 Rails 应用程序,它为开发中的每个请求生成重复请求。该应用程序运行 Rails 2.3.5,而我的主要开发机器运行 Ubuntu 10.4。但是,相同的代码运行良好,而不会在我的 OS X 10.6 机器上显示重复的请求。它还可以在任何一台机器上以生产模式运行而不会出现问题。

  Processing DashboardController#index (for 127.0.0.1 at 2010-07-16 10:23:08) [GET]
  Parameters: {"action"=>"index", "controller"=>"dashboard"}
Rendering template within layouts/application
Rendering dashboard/index
  Term Load (1.9ms)   SELECT * FROM "date_ranges" WHERE ('2010-07-16' BETWEEN begin_date and end_date ) AND ( ("date_ranges"."type" = 'Term' ) ) 
  StaticData Load (1.1ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'SITE_NAME') LIMIT 1
  CACHE (0.0ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'SITE_NAME') LIMIT 1
Rendered dashboard/_news (0.1ms)
  CACHE (0.0ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'SITE_NAME') LIMIT 1
  CACHE (0.0ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'SITE_NAME') LIMIT 1
  StaticData Load (0.9ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'TAG_LINE') LIMIT 1
Completed in 67ms (View: 58, DB: 5) | 200 OK [http://localhost/dashboard]
  SQL (0.4ms)   SET client_min_messages TO 'panic'
  SQL (0.4ms)   SET client_min_messages TO 'notice'


Processing DashboardController#index (for 127.0.0.1 at 2010-07-16 10:23:08) [GET]
  Parameters: {"action"=>"index", "controller"=>"dashboard"}
Rendering template within layouts/application
Rendering dashboard/index
  Term Load (1.9ms)   SELECT * FROM "date_ranges" WHERE ('2010-07-16' BETWEEN begin_date and end_date ) AND ( ("date_ranges"."type" = 'Term' ) ) 
  StaticData Load (1.1ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'SITE_NAME') LIMIT 1
  CACHE (0.0ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'SITE_NAME') LIMIT 1
Rendered dashboard/_news (0.1ms)
  CACHE (0.0ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'SITE_NAME') LIMIT 1
  CACHE (0.0ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'SITE_NAME') LIMIT 1
  StaticData Load (0.9ms)   SELECT * FROM "static_data" WHERE ("static_data"."name" = E'TAG_LINE') LIMIT 1
Completed in 67ms (View: 58, DB: 5) | 200 OK [http://localhost/dashboard]
  SQL (0.4ms)   SET client_min_messages TO 'panic'
  SQL (0.4ms)   SET client_min_messages TO 'notice'

请注意,请求完全相同相同,甚至包括时间戳。

我尝试过使用 Ruby 1.8.7 和 1.9.1 以及在 Mongrel 和 Webrick 之间进行交换,它总是处理每个请求两次(或者至少它生成两个日志条目)。我尝试删除大部分路线以查看是否发生了奇怪的事情,但问题仍然存在。我尝试了不同机器上的不同浏览器(Chrome、Safari、eLinks),看看是否有帮助,但问题仍然存在。我移除了所有的宝石,只更换了必要的宝石,但无济于事。

有人知道为什么 Rails 会导致这样的重复请求吗?我几乎无所适从,正抓着稻草。唯一的亮点是,这种行为不会在生产环境下发生,只会在开发环境下发生。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    当人们从 google 提出这个问题时,重要的是他们要消除重复日志之间的问题,如下所示:

    A
    A
    B
    B
    C
    C
    

    来自如下所示的重复日志:

    A
    B
    C
    
    A
    B
    C
    

    前者很可能来自重复的LOGGING。后者可能来自重复的请求。如果是后者,如提问者 (OP) 所示,您应该强烈考虑@www 寻找<img src="#"> 或类似的自引用 url 标签的答案。我花了几个小时试图弄清楚为什么我的应用程序似乎发出了两个重复的请求,在阅读了@www 的答案(或@aelor 在Double console output? 上的答案)后,我发现

    %link{href: "", rel: "shortcut icon"}/
    

    在我的代码中!它导致我的生产应用程序的每个页面都被双重渲染!!!!性能太差,太烦人了!

    【讨论】:

    • 但是为什么空白的href 会导致其他链接双重渲染?还是我错过了什么?
    【解决方案2】:

    检查你的代码,看看里面是否有这样的东西:

    我刚才遇到了同样的问题,因为标签

    <img src="#">
    

    这将导致 Rails 发出重复请求!

    【讨论】:

      【解决方案3】:

      在安装了依赖于 rails_stdout_logging

      的 heroku rails_12factor gem 之后,我在 rails 4.2.3 中发生了这种情况

      【讨论】:

        【解决方案4】:

        问题的“答案”是移动到一个新目录并从 Github 获取原始代码。在新目录中配置和设置所有内容后,应用程序可以正常工作,没有重复请求。我仍然不知道为什么原始目录中的代码会出错;我什至区分了目录,唯一的异常值是日志文件。

        我在这里回答我自己的问题是为了让其他可能遇到同样问题的人保持理智。

        【讨论】:

        • 我正在经历同样的事情 - 在雪豹上使用 Rails 2.8.6。
        【解决方案5】:

        我通过在 app/config/environments/development.rb 中注释以下行解决了这个问题:

        config.middleware.use Rails::Rack::LogTailer
        

        我不记得使用此设置的确切原因

        【讨论】:

          【解决方案6】:

          我在这里通过清理所有预编译资产来解决同样的问题: rake assets:clean

          我尝试删除 app 文件夹,然后从 GitHub 签出他,但没有成功。

          希望对您有所帮助。 谢谢。

          【讨论】:

            【解决方案7】:

            在使用我编写的一些自定义中间件后,我开始在开发中发生这种情况。 运行 rake assets:clean:all 解决了它。

            【讨论】:

              【解决方案8】:

              这个小解决方法解决了我的问题。请按以下步骤操作:

              在 Rails 外部库下,搜索 railties 模块。 转到这个路径:/lib/commands/server.rb

              在这个文件中注释这一行, Rails.logger.extend(ActiveSupport::Logger.broadcast(console))

              这个命令会关闭广播,然后重启你的 Rails 服务器。您将不会再看到任何重复的日志。编码愉快。

              【讨论】:

                猜你喜欢
                • 2012-09-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-06-19
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多