2012-03-04 14 views
9

Tôi gặp sự cố khi một webkit_server với Capybara và capybara-webkit chạy không kết nối với màn hình Xvfb cục bộ bị treo khi truy cập URL. Dường như điều này xảy ra sau vài phút liên tục truy cập các URL khác nhau và thực hiện công cụ tìm kiếm. (Tôi đang sử dụng capybara cho một ứng dụng cạo màn hình trong vani Ruby, không phải để thử nghiệm.)webkit_server treo cứng định kỳ khi chạy từ Capybara trong Ruby

Tôi đã xác nhận rằng khi nó treo trang web vẫn có thể truy cập được (ví dụ, thông qua curl hoặc wget trên dòng lệnh) . Tôi cũng đã thử gói mã Ruby để gọi lượt truy cập và các công cụ tìm kiếm tiếp theo trong một khối Thời gian chờ để sau 60 giây chờ URL mới được truy cập, nhưng mọi lần truy cập() không thành công sau lần đầu tiên xảy ra. Cách duy nhất để khắc phục vấn đề là giết cả quá trình Ruby gọi Capybara/capybara-webkit và quá trình webkit_server và khởi động lại.

Khi tôi strace quá trình webkit_server, tôi thấy đầu ra như thế này lặp đi lặp lại:

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) 

Và nếu tôi strace quá trình Ruby đó gọi nó, nó được treo trên một read():

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

Tôi biết rằng mã Ruby treo trên phương thức Capybara visit().

Bất kỳ ý tưởng nào về những gì tôi có thể làm để khắc phục sự cố hoặc sửa lỗi này đều được đánh giá cao. Tôi giả định rằng vấn đề có liên quan đến một số tài nguyên webkit_server cần truy cập vào URL nhưng tôi không chắc chắn nên làm gì tiếp theo.

Cảm ơn!

+0

Ngoài ra, cho những gì nó có giá trị, tôi đã cố gắng sử dụng trình điều khiển webkit_debug Capybara và bật lên ghi riêng Capybara của. Các dòng cuối cùng từ đầu ra gỡ lỗi là: >> Truy cập >> 1 >> 109 >> http: // [URL của trang web] Tôi đã thử sử dụng xwd để chụp màn hình những gì đang diễn ra tại thời điểm này : xwd -root -display: 1 | xwdtopnm | pnmtopng> screenshot.png Nhưng tôi chỉ nhận được một hình chữ nhật màu đen. –

Trả lời

1

Tôi đã gặp sự cố này khi Capybara đang sử dụng Webrick để chạy máy chủ. Thêm "gem 'thin'" vào Gemfile của bạn & nó sẽ tự động sử dụng thay vào đó. Xem điều đó có giúp ích gì không?

+0

Cảm ơn. Thật không may tôi phải sử dụng webkit_server, vì vậy tôi không nghĩ rằng mỏng sẽ giúp đỡ trong trường hợp cụ thể này. Nó có thể giúp với các máy chủ khác mặc dù. –

+2

Có lẽ tôi sai, nhưng tôi nghĩ webkit_server chỉ là một trình duyệt không đầu. Capybara vẫn đang chạy Thin/Webrick/bất cứ điều gì để cung cấp cho trình duyệt một cái gì đó để nói chuyện, phải không? –

+0

Tôi thấy rằng tôi đã phải thêm một cách rõ ràng xử lý mỏng, như Grimmo đã làm. – Empact

2

Tôi đã tìm thấy rằng gọi Capybara.reset_sessions! sau khi có lỗi xảy ra để khắc phục sự cố này. Tôi không chắc chắn tại sao, nhưng tôi đã không có vấn đề kể từ đó.

+1

bạn có thể vui lòng làm rõ nơi bạn thêm các reset_sessions?Là nó trong một cái móc sau? Làm thế nào để bạn điều kiện yêu cầu của nó về sự xuất hiện của một lỗi? –

13

Các capybara-webkit 1.0 ngẫu nhiên treo trên toàn bộ bộ cho tôi là tốt.

Chỉ cần thêm 'mỏng' là không đủ. Nhưng sử dụng rõ ràng xử lý Thin làm việc. Thêm vào env.rb:

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

Note Thin cảnh báo sử dụng: https://github.com/thoughtbot/capybara-webkit/issues/399#issuecomment-22328028

+3

Nếu tôi có thể cung cấp cho bạn một 1000 upvotes tôi muốn làm điều đó. Sau nhiều giờ thử tất cả mọi thứ, điều này đã làm cho nó. Bạn cũng có thể vô hiệu hóa việc ghi nhật ký mỏng gây phiền nhiễu lúc bắt đầu bằng cách thêm: 'Thin :: Logging.silent = true' – yagooar

+0

Đã bỏ qua 8 giờ trong cuộc đời của tôi về điều này. cảm ơn cho những người đứng đầu lên! – stuartchaney

Các vấn đề liên quan