Можно ли запустить 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