PhantomJS、Capybara、Poltergeist 无法访问服务器

PhantomJS, Capybara, Poltergeist failed to reach server

我是第一次使用 poltergeist,所以我真的不知道我在做什么,但我在网上找不到任何解决方案。请告诉我是否缺少任何信息。

错误信息:

Capybara::Poltergeist::StatusFailError: Request failed to reach server, check DNS and/or server status

此问题不会发生在生产环境中,只会发生在开发和暂存环境中。

这行代码造成了麻烦

phantomjs_options: ['--ignore-ssl-errors=yes', '--ssl-protocol=any', '--load-images=no', '--proxy=localhost:9050', '--proxy-type=socks5']

在没有“--proxy=localhost:9050”的情况下,一切在每个环境中都能完美运行,但我不想删除它,以防它对生产至关重要。

我还注意到 staging/development 上没有 9050 端口侦听,但在生产环境中有一个

完整配置代码部分 (capybara_drivers.rb):

Capybara.register_driver :polt do |app|
  Capybara::Poltergeist::Driver.new(
      app,
      js_errors: false, # break on js error
      timeout: 180, # maximum time in second for the server to produce a response
      debug: false, # more verbose log
      window_size: [1280, 800], # not responsive, used to simulate scroll when needed
      inspector: false, # use debug breakpoint and chrome inspector,
      phantomjs_options: ['--ignore-ssl-errors=yes', '--ssl-protocol=any', '--load-images=no', '--proxy=localhost:9050', '--proxy-type=socks5']

  )
end

听起来您的生产环境需要通过 socks5 代理建立出站连接,而您的其他环境则不需要。您需要根据环境进行配置

Capybara.register_driver :polt do |app|
  phantomjs_options = ['--ignore-ssl-errors=yes', '--ssl-protocol=any', '--load-images=no']
  phantomjs_options.push('--proxy=localhost:9050', '--proxy-type=socks5') if Rails.env.production?
  Capybara::Poltergeist::Driver.new(
      app,
      js_errors: false, # break on js error
      timeout: 180, # maximum time in second for the server to produce a response
      debug: false, # more verbose log
      window_size: [1280, 800], # not responsive, used to simulate scroll when needed
      inspector: false, # use debug breakpoint and chrome inspector,
      phantomjs_options: phantomjs_options
  )
end