webkit_server периодически зависает при запуске из Capybara в Ruby - PullRequest
11 голосов
/ 05 марта 2012

У меня возникла проблема, когда экземпляр webkit_server с Capybara и capybara-webkit, работающий без наушников, подключенный к локальному экрану Xvfb, зависает при посещении URL-адреса. Кажется, это происходит после нескольких минут повторного посещения разных URL-адресов и выполнения поиска. (Я использую капибару для скрининга экрана в ванильном Ruby, а не для тестирования.)

Я подтвердил, что при зависании сайт все еще доступен (например, с помощью curl или wget в командной строке). Я также попытался обернуть код Ruby, который вызывает посещение и последующие средства поиска, в блок Timeout, чтобы после 60 секунд ожидания посещался новый URL, но любая попытка посещения () не удалась после первого раза, когда это произошло. Единственный способ решить эту проблему - убить процесс Ruby, вызывающий Capybara / capybara-webkit, а также процесс 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, который его вызывает, он зависает на чтение ():

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

Я знаю, что код Ruby зависает от метода посещения () Capybara.

Любые идеи о том, что я могу сделать для устранения неполадок или исправления, приветствуются. Я предполагаю, что проблема связана с каким-то ресурсом, который необходим webkit_server для посещения URL, но я не уверен, что делать дальше.

Спасибо!

Ответы [ 3 ]

14 голосов
/ 08 августа 2013

Capybara-webkit 1.0 также случайно зависает для меня на всем комплекте.

Недостаточно просто добавить «thin».Но явное использование 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

3 голосов
/ 15 апреля 2012

Я обнаружил, что вызов Capybara.reset_sessions! после ошибки, кажется, исправляет эту проблему. Я не уверен почему, но у меня не было проблемы с тех пор.

2 голосов
/ 06 апреля 2012

Я видел эту проблему, когда Capybara использует Webrick для запуска сервера. Добавьте «gem 'thin» в ваш Gemfile, и он автоматически будет использовать его вместо этого. Посмотрите, поможет ли это?

...