【问题标题】:Why is the first Rails request extremely slow in testing?为什么第一个 Rails 请求在测试中非常慢?
【发布时间】:2017-08-14 15:24:20
【问题描述】:

在 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 秒并不好玩)

【问题讨论】:

  • 你在用弹簧吗? (或类似的东西?)
  • 不是这个时候,这在过去我们没有意识到我们需要重新启动 Spring 服务器来解决奇怪的问题时导致问题
  • 我不确定我们是否对您的设置有足够的了解以提供很大帮助...如果您只运行一项无操作测试(如 true == true),它是否仍然很慢自己?

标签: ruby-on-rails cucumber


【解决方案1】:

不幸的是,答案与我们的代码非常孤立,但我想分享答案,以防其他人遇到这种情况。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-03-22
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2014-11-05
    • 2015-03-09
    • 1970-01-01
    相关资源
    最近更新 更多