Можно ли запустить capybara-webkit (т.е. Forked webkit_server) на Heoku Cedar?

Мне нужно запустить capybara-webkit внутри приложения Rails, чтобы включить просмотр без браузера с поддержкой JavaScript (т.е. не для тестирования/целей CI, а webrat или другие драйверы/рамки для приемочного тестирования не будут работать). Мне интересно, возможно ли это при развертывании Heroku, особенно потому, что для этого требуется QtWebKit и возможность разветвлять процесс webkit_server с помощью сокетов. Я открыт для творческих идей о том, как сделать эту работу на Heroku (например, пул рабочих динозавров). Я надеюсь, что кто-то лучше справится с тем, какие ограничения существуют в среде Heroku, или может категорически исключить возможность, поэтому я могу при необходимости перейти на AWS EC2.

Поиск этого, как правило, очень много говорит о тестировании capybara и надстройках для серверов CI, ни один из которых не подходит для моего варианта использования. Я не тестирую ничего (по крайней мере, не в традиционном смысле огурца /rspec/etc ). Я использую интеграцию Capybara с драйвером webkit, поисковиками и моделью node/element для навигации по веб-сайту, для чего требуется значительное количество клиентская JS для работы.

Я также открыт для других (родных Ruby) решений для программного взаимодействия с веб-сайтами с использованием DOM с поддержкой JavaScript.

Ответ 1

Я говорил с поддержкой Хероку об этом, и их ответ заключался в том, что это в основном а) неподдерживаемый; б) очень сложно, в том числе (среди прочего) статически построенная версия QtWebKit.

Мое собственное исследование этого на Amazon EC2 также заставило меня понять, что QtWebKit требует запускающего экземпляра Xvfb. Я очень сомневаюсь, что это будет доступно на Heroku, и я подозреваю, что было бы чрезвычайно сложно заставить его работать.

Мой собственный подход состоял в том, чтобы поместить эту функциональность в экземпляр EC2. Сделав некоторые попытки с AMA Amazon (их сборка и RHEL), я обнаружил, что пакеты, доступные через системы управления пакетами Ubuntu, намного облегчили работу.

Короче говоря: Heroku - это не стартер, Amazon EC2 с Ubuntu - лучший способ пойти.

Ответ 2

Мне удалось успешно запустить Capybara + Poltergeist + PhantomJS на Heroku

Я поместил скомпилированные двоичные файлы phantomjs для OSX (для моей машины разработки) и linux-64 (для Heroku) в bin/папку моего приложения Rails.

Инициализаторы/capybara.rb

require 'capybara/poltergeist'

Capybara.register_driver :poltergeist do |app|
  phantomjs_path = if RUBY_PLATFORM['x86_64-darwin']
                     Rails.root.join('bin', 'phantomjs-osx').to_s
                   elsif RUBY_PLATFORM['x86_64-linux']
                     Rails.root.join('bin', 'phantomjs-linux-64').to_s
                   else
                     raise "Can't load PhantomJS for OS: #{RUBY_PLATFORM}"
                   end

  options = {
      phantomjs: phantomjs_path,
      phantomjs_logger: Logger.new('/dev/null'),
      phantomjs_options: %w[--load-images=no --ignore-ssl-errors=yes],
      js_errors: false,
      timeout: 90
  }
  Capybara::Poltergeist::Driver.new(app, options)
end

Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
Capybara.default_wait_time = 1

Пример кода:

session ||= Capybara::Session.new(:poltergeist)
session.visit('http://google.com')

Удачи!

Ответ 3

Вы можете выполнить то, что хотите, используя PhantomJS.

В этом проекте есть JavaScript, а не Ruby API, хотя экземпляр браузера может выставлять веб-сервер, позволяя вам связываться с ним из Ruby over HTTP.

http://code.google.com/p/phantomjs/wiki/Interface