关于Ruby on Rails:水豚探访无缘无故被卡住

Capybara visit gets stuck for no reason

我们为Rails项目提供了一个大型Cucumber 套件。全部都是水豚,大部分通过Firefox浏览。

最近,我们开始经历失败,这是我努力奋斗的方向。外观如下:

  • 在某些时候(总是一样),水豚visit卡在试图加载页面上,水豚最终超时,无法找到要查找的元素(请参见下面的跟踪);其他功能中的每次后续访问也会超时;
  • 如果发生该功能的功能独立运行,则问题消失;
  • 如果在故障发生之前使用调试器(binding.pry),则问题消失;
  • 在卡住的情况下,如果我在Firefox地址栏中按Enter,则请求立即获得通过,测试继续进行并完成,没有任何问题。

一个可能不相关的细节:我们正在使用多个会话(capybara using_session),因此到发生故障时,共有三个Firefox实例。但是话又说回来,在此之前有三个实例很高兴地通过。

我的伴生的机器上也出现相同的行为。

在Rails日志中没有可疑的东西。没有迹象表明该请求试图通过。

OSX 10.8.2,ruby 1.9.3,rails 3.2.6,sqlite3,最新的水豚/selenium。

错误堆栈跟踪:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  Timeout::Error (Timeout::Error)
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:132:in `readline'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:2551:in `read_new'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1316:in `catch'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1293:in `request'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1286:in `block in request'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:745:in `start'
  /Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1284:in `request'
  (eval):2:in `has_css?'
  ./features/step_definitions/home_page_steps.rb:70:in `/^I am taken to the products page on the retailer site$/'
  features/home_page.feature:21:in `Then I am taken to the products page on the retailer site'
  Timeout::Error (Timeout::Error)

编辑

bundle update似乎已消失

编辑2

如果您遇到类似问题,并且正在使用FireBug(水豚/萤火虫),请尝试将其禁用。

编辑3

在我看来,由于我们已经从webrick切换到Thin(在测试/开发中),所以从未发生过。就像在Gemfile中添加gem 'thin'一样简单。可能值得一试。


bundle update似乎已消失