问题 是否可以在Heroku Cedar上运行capybara-webkit(即forked webkit_server)?


我需要在Rails应用程序中运行capybara-webkit,以启用JavaScript支持的无头Web浏览(即不用于测试/ CI目的,webrat或其他验收测试驱动程序/框架将不起作用)。我想知道在Heroku部署中是否可行,特别是因为它需要QtWebKit并能够使用套接字通信分叉webkit_server进程。我对如何在Heroku上进行这项工作(例如工人dynos池)有创意。我希望有人能更好地处理Heroku环境中存在的约束,或者可以断然排除这种可能性,以便我可以在必要时转移到AWS EC2。

对此进行搜索往往会导致很多关于CI服务器的水豚测试和附加组件,这两者都与我的用例无关。我没有测试任何东西(至少没有测试传统的黄瓜/ rspec /等) - 我正在使用Capybara与webkit驱动程序,finders和node / element模型的集成来导航需要大量客户端的网站 - 方JS为了工作。

我也对其他(本机Ruby)解决方案持开放态度,以便使用支持JavaScript的DOM以编程方式与网站进行交互。


10914
2018-01-24 07:10


起源



答案:


我和Heroku支持了这个问题,他们的回答是,这基本上是a)不支持; b)非常困难,包括(除其他外)静态构建的QtWebKit版本。

我在Amazon EC2上对此进行的调查也让我意识到QtWebKit需要一个正在运行的Xvfb实例。我非常怀疑这可以在Heroku上使用,我怀疑它是非常难以使它工作。

我自己的方法是将此功能放在EC2实例上。在使用亚马逊的标准AMI(他们的构建版本和RHEL)进行一些尝试后,我发现通过Ubuntu的软件包管理系统提供的软件包使得运行更容易。

长话短说:Heroku是一个非首发,亚马逊EC2与Ubuntu是最好的方式。


7
2018-01-31 02:06





我能够在Heroku上成功运行Capybara + Poltergeist + PhantomJS

我在我的Rails应用程序的bin /文件夹中为OSX(对于我的开发机器)和linux-64(对于Heroku)放置了编译的phantomjs二进制文件。

初始化/ 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')

祝你好运!


5
2018-03-23 15:49



自2015年以来事情必定发生了变化 - 现在不是将二进制文件包含在bin中,而是可以使用phantomjs gem然后制作 phantomjs_path = Phantomjs.path.to_s - MingMan


答案:


我和Heroku支持了这个问题,他们的回答是,这基本上是a)不支持; b)非常困难,包括(除其他外)静态构建的QtWebKit版本。

我在Amazon EC2上对此进行的调查也让我意识到QtWebKit需要一个正在运行的Xvfb实例。我非常怀疑这可以在Heroku上使用,我怀疑它是非常难以使它工作。

我自己的方法是将此功能放在EC2实例上。在使用亚马逊的标准AMI(他们的构建版本和RHEL)进行一些尝试后,我发现通过Ubuntu的软件包管理系统提供的软件包使得运行更容易。

长话短说:Heroku是一个非首发,亚马逊EC2与Ubuntu是最好的方式。


7
2018-01-31 02:06





我能够在Heroku上成功运行Capybara + Poltergeist + PhantomJS

我在我的Rails应用程序的bin /文件夹中为OSX(对于我的开发机器)和linux-64(对于Heroku)放置了编译的phantomjs二进制文件。

初始化/ 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')

祝你好运!


5
2018-03-23 15:49



自2015年以来事情必定发生了变化 - 现在不是将二进制文件包含在bin中,而是可以使用phantomjs gem然后制作 phantomjs_path = Phantomjs.path.to_s - MingMan


您可以使用PhantomJS完成您想要的任务。

该项目有一个JavaScript而不是Ruby API,尽管浏览器实例可以公开Web服务器,允许您通过HTTP与Ruby进行通信。

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


2
2018-01-25 20:46



poltergeist gem为PhantomJS提供了一个Ruby API - subelsky
似乎Capybara / Phantomjs / Poltergeist不适用于Heroku。门票已经关闭,因此不太可能很快就会出现。 github.com/jonleighton/poltergeist/issues/194 - Tim Scott