为什么第一个Rails请求测试速度极慢?

时间:2017-08-14 15:24:21

标签: ruby-on-rails cucumber

在Ruby on Rails中,当我运行rails服务器时,第一个请求似乎非常慢,日志显示缓慢来自视图呈现:

2017-08-14 10:24:12.707 [ 22139] [INFO ] Completed 200 OK in 18547ms (Views: 18501.6ms | ActiveRecord: 3.7ms)

我认为这是因为它需要连接到数据库。下一个请求当然是快速(呃):

2017-08-14 11:01:54.937 [ 25662] [INFO ] Completed 200 OK in 765ms (Views: 714.0ms | ActiveRecord: 8.3ms)

我认为这与缓存有关,它已经有了数据库连接。我试图重新启动我的服务器,重新启动数据库,清除我的浏览器缓存和rake db:sessions:clear,但我无法在开发过程中再次提出缓慢的请求。

这是事情变得有趣的地方。 每次我都会进行黄瓜测试,第一次请求总是非常慢:

2017-08-14 11:19:52.879 [ 27729] [INFO ] Completed 200 OK in 38326ms (Views: 38306.8ms | ActiveRecord: 6.1ms)

由于未知原因,它比开发时间更长。

重新启动Rails服务器和重新运行使测试的第一个请求如此缓慢的测试之间有什么不同?我可以采取哪些措施来解决此类问题?

(每次我们想要进行我们的黄瓜测试之前等待30秒都没有乐趣)

1 个答案:

答案 0 :(得分:1)

不幸的是,答案与我们的代码完全隔离,但我想分享答案,以防其他任何人遇到过这种情况。

我注意到如果我运行rake tmp:cache:clear,浏览器中的第一个请求会再次变慢。我调查了那个命令并看到它清除了#{Rails.root}/tmp目录。

然后我在黄瓜env.rb中找到了这一行:

Dir.foreach("#{Rails.root}/tmp") { |f|
  FileUtils.rm_rf("#{Rails.root}/tmp/#{f}")
}

这似乎是整个时间的罪魁祸首。我不知道为什么会增加(3年前......)