Rails app记录重复请求

时间:2010-07-16 14:42:57

标签: ruby-on-rails

我有一个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会导致像这样的重复请求?我在我的智慧结束,正在抓住稻草。唯一明亮的火花是这种行为不会在生产环境下发生,只有发展。

8 个答案:

答案 0 :(得分:5)

检查您的代码,看看里面是否有这样的内容:

由于标签

,我现在遇到了同样的问题
<img src="#">

这会导致rails发出重复请求!

答案 1 :(得分:5)

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

A
A
B
B
C
C

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

A
B
C

A
B
C

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

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

在我的代码中!这导致我的生产应用程序的每一页都被双重渲染!对性能如此糟糕,太烦人了!

答案 2 :(得分:3)

在安装heroku rails_12factor gem之后,我在rails 4.2.3中发生这种情况,这取决于 rails_stdout_logging

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:2)

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

我试图删除app文件夹,然后从GitHub核对他但是没有用。

希望这有帮助。 感谢。

答案 5 :(得分:1)

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

我在这里回答我自己的问题,因为其他人可能会遇到同样的问题。

答案 6 :(得分:1)

在我编写了一些自定义中间件后,开始发生这种情况。 运行rake资产:干净:全部解决了它。

答案 7 :(得分:0)

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

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

在此文件中注释此行,  Rails.logger.extend(的ActiveSupport :: Logger.broadcast(控制台))

此命令将关闭广播,只需重启rails服务器即可。你不会再看到任何重复的日志了。快乐的编码。