11

URL にアクセスすると、ローカルの Xvfb 画面に接続されたヘッドレスで実行されている Capybara および capybara-webkit を使用した webkit_server のインスタンスがハングするという問題が発生しています。数分間、異なる URL に繰り返しアクセスし、ファインダーを実行した後に発生するようです。(テスト用ではなく、バニラRubyの画面スクレイピングアプリケーションにカピバラを使用しています。)

ハングしてもサイトにアクセスできることを確認しました (たとえば、コマンド ラインで curl または wget を使用)。また、訪問と後続のファインダーを呼び出す Ruby コードを Timeout ブロックでラップしてみました。これにより、60 秒待ってから新しい URL が訪問されますが、最初にこれが発生した後はすべての visit() 試行が失敗します。この問題を解決する唯一の方法は、Capybara/capybara-webkit を呼び出す Ruby プロセスと webkit_server プロセスの両方を強制終了して再起動することです。

webkit_server プロセスをトレースすると、次のような出力が繰り返し表示されます。

clock_gettime(CLOCK_MONOTONIC, {5821, 680279627}) = 0
gettimeofday({1330890176, 712033}, {0, 33052112}) = 0
gettimeofday({1330890176, 712087}, {0, 140736435864256}) = 0
gettimeofday({1330890176, 712137}, {0, 33108640}) = 0
clock_gettime(CLOCK_MONOTONIC, {5821, 680486036}) = 0
clock_gettime(CLOCK_MONOTONIC, {5821, 680530091}) = 0
read(7, 0x1fac1b4, 4096)                = -1 EAGAIN (Resource temporarily unavailable)

それを呼び出す Ruby プロセスをトレースすると、read() でハングします。

Process 3331 attached - interrupt to quit
read(5, 
^C <unfinished ...>
Process 3331 detached

Ruby コードが Capybara の visit() メソッドでハングしていることはわかっています。

これをトラブルシューティングまたは修正するために私ができることについてのアイデアをいただければ幸いです。この問題は、webkit_server が URL にアクセスする必要があるリソースに関係していると思いますが、次に何を試せばよいかわかりません。

ありがとう!

4

3 に答える 3

15

capybara-webkit 1.0 もスイート全体でランダムにハングします。

単に「薄い」を追加するだけでは十分ではありませんでした。ただし、Thin ハンドラーの明示的な使用は機能しました。env.rb に追加:

Capybara.server do |app, port|
  require 'rack/handler/thin'
  Rack::Handler::Thin.run(app, :Port => port)
end

シン使用に関する注意事項: https://github.com/thoughtbot/capybara-webkit/issues/399#issuecomment-22328028

于 2013-08-07T23:27:12.363 に答える
3

Capybara.reset_sessions!エラーの後に呼び出すと、この問題が修正されるようです。理由はわかりませんが、それ以来、問題は発生していません。

于 2012-04-14T21:21:00.073 に答える
2

この問題は、Capybara が Webrick を使用してサーバーを実行しているときに発生しました。Gemfile に「gem 'thin'」を追加すると、代わりに自動的にそれが使用されます。それが役立つかどうかを確認しますか?

于 2012-04-06T09:42:08.727 に答える