我遇到的问题是,当访问URL时,带有Capybara和capybara-webkit的webkit_server实例无法连接到本地Xvfb屏幕.这似乎发生在反复访问不同的URL和执行查找程序几分钟后.(我使用capybara用于香草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)
Run Code Online (Sandbox Code Playgroud)
如果我调用调用它的Ruby进程,它会挂在read()上:
Process 3331 attached - interrupt to quit
read(5,
^C <unfinished ...>
Process 3331 detached
Run Code Online (Sandbox Code Playgroud)
我知道Ruby代码挂在Capybara visit()方法上.
关于我可以采取哪些措施进行故障排除或纠正这一点的任何想法都表示赞赏.我假设问题与某些资源webkit_server需要访问URL有关,但我不确定接下来要尝试什么.
谢谢!