从Ruby中的Capybara运行时,webkit_server会定期挂起

我遇到的问题是,当访问URL时,带有Capybara和capybara-webkit的webkit_server实例连接到本地Xvfb屏幕时无法运行。 这似乎发生在反复访问不同的URL和执行查找程序几分钟后。 (我使用capybara在vanilla Ruby中进行屏幕抓取应用程序,而不是用于测试。)

我已经确认,当它挂起时,仍然可以访问该站点(例如,通过命令行上的curl或wget)。 我还尝试包装调用Timeout块中的访问和后续查找程序的Ruby代码,以便在等待60秒后访问新URL,但任何visit()尝试在第一次发生后都会失败。 解决问题的唯一方法是同时杀死调用Capybara / capybara-webkit和webkit_server进程并重新启动的Ruby进程。

当我对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  Process 3331 detached 

我知道Ruby代码挂在Capybara的visit()方法上。

任何有关我可以采取哪些措施来排除故障或纠正此问题的建议都表示赞赏。 我假设问题与某些资源webkit_server需要访问URL有关,但我不确定接下来要尝试什么。

谢谢!

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

我发现打电话给Capybara.reset_sessions! 一个错误后似乎纠正了这个问题。 我不知道为什么,但我从未遇到过这个问题。

当Capybara使用Webrick运行服务器时,我已经看到了这个问题。 在您的Gemfile中添加“gem’thin’”,它会自动使用它。 看看是否有帮助?

Interesting Posts