2012-03-04 54 views
9

我遇到一個問題,那就是在訪問URL時,運行無頭連接到本地Xvfb屏幕的Capybara和capybara-webkit的webkit_server實例掛起。這似乎發生幾分鐘後反覆訪問不同的URL和執行查找程序。 (我使用水豚在香草紅寶石屏幕上刮取應用程序,而不是用於測試。)webkit_server在Ruby中的水豚中運行時會定期掛起

我已經證實,當它掛起時,網站仍然可以訪問(例如,通過命令行上的curl或wget) 。我也嘗試過在Timeout塊中包裝調用訪問和後續查找器的Ruby代碼,以便在等待新URL的60秒後訪問,但任何visit()嘗試在第一次發生後都失敗。解決問題的唯一方法是殺死調用Capybara/capybara-webkit的Ruby進程和webkit_server進程並重新啓動。

當我與strace的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) 

如果我與strace的Ruby進程調用它,它是掛在read()方法:

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

我知道Ruby代碼掛在Capybara訪問()方法上。

任何想法,我可以做什麼來解決或糾正這是值得讚賞的。我假設這個問題與webkit_server需要訪問的一些資源有關,但我不確定接下來要嘗試什麼。

謝謝!

+0

此外,對於它的價值,我已經使用webkit_debug水豚司機試圖轉身了水豚自己的日誌記錄。從調試輸出的最後一行是: >>訪問 >> 1 >> 109 >> 的http:// [網站URL] 我試着使用XWD篩選捕獲做的是在這一點上發生: xwd -root -display:1 | xwdtopnm | pnmtopng> screenshot.png 但我只得到一個黑色的矩形。 – 2012-03-04 22:27:07

回答

1

當Capybara使用Webrick運行服務器時,我看到了這個問題。將「gem'thin'」添加到您的Gemfile &中,它會自動使用它。看看是否有幫助?

+0

謝謝。不幸的是,我必須使用webkit_server,所以我不認爲在這種特殊情況下瘦客戶端會有所幫助。它可能會幫助其他服務器。 – 2012-04-14 21:19:03

+2

也許我錯了,但我認爲webkit_server只是一個無頭瀏覽器。水豚仍然在運行Thin/Webrick /無論如何讓瀏覽器可以與之交談,對吧? – 2012-04-16 07:19:00

+0

我發現我必須明確添加瘦處理程序,就像Grimmo一樣。 – Empact 2013-08-22 00:21:54

2

我發現在錯誤似乎可以解決此問題後調用Capybara.reset_sessions!。我不知道爲什麼,但自那之後我就沒有這個問題了。

+1

你能否澄清一下你添加reset_sessions的地方?它在後鉤?如何在發生錯誤時調用其調用? – 2015-04-03 12:30:23

13

水豚web-1.0隨機掛在整個套房對我來說也是如此。

只需添加「薄」是不夠的。 但顯式使用瘦處理程序工作。加入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

+3

如果我可以給你1000個upvotes我會這樣做。經過幾個小時的嘗試,這就成了。您也可以在開始時通過添加:'Thin :: Logging.silent = true'來禁用煩人的Thin日誌記錄。 – yagooar 2014-06-29 11:35:38

+0

浪費了我8個小時的時間。感謝您的支持! – stuartchaney 2015-04-20 19:39:49