自从我开始使用 Capybara::Poltergeist 以来得到 "can't create Thread: Resource temporarily unavailable"
Getting "can't create Thread: Resource temporarily unavailable" since I started using Capybara::Poltergeist
我最近添加了一些使用 Capybara::Poltergeist 从使用 JavaScript 的页面获取信息的代码。
(如果可以的话,我很乐意用其他东西代替它)
我加载页面,向其中输入一些数据,单击按钮,等待 return 值。
为了尽量减少内存泄漏、僵尸进程等,我使用以下方法:
Capybara.default_driver = :poltergeist
Capybara.default_max_wait_time = 60
Capybara.javascript_driver = :poltergeist
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, {js_errors: false} )
end
capybara_session = Capybara::Session.new(:poltergeist , timeout: 60 )
我做了一些动作.....
capybara_session.try(:reset_session!)
capybara_session.try(:driver).try(:quit)
Capybara.try(:drivers).try(:clear)
但是我运行几个小时后仍然得到"can't create Thread: Resource temporarily unavailable"
知道如何解决或替换这个问题吗?
这里的主要问题是 Session.new 的不正确使用。 Session.new 的第二个参数应该是正在测试的应用程序,如果传入则触发为该应用程序创建服务器线程。因为你实际上并没有测试一个应用程序,所以参数应该是 nil(它默认为)所以
capybara_session = Session.new(:poltergeist)
timeout: 60
选项在创建时传递给驱动程序。
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, js_errors: false, timeout: 60 )
end
作为对我现在使用的选项的回顾。
似乎是一个很好的性能组合,没有松散的线程。
timeout = 45
Capybara.run_server = false
Capybara.default_max_wait_time = timeout
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
capybara_session = Capybara::Session.new(:poltergeist , timeout: timeout , js_errors: false )
capybara_session.driver.options[:js_errors] = false
capybara_session.driver.options[:timeout] = timeout
capybara_session.driver.options[:debug] = true
capybara_session.driver.options[:phantomjs_logger] = true
capybara_session.driver.options[:stdout] = true
capybara_session.driver.options[:phantomjs_options] = ['--proxy-type=none','--load-images=no','--ignore-ssl-errors=yes','--ssl-protocol=any','--web-security=false','--debug=true']
对会话进行一些操作.........
capybara_session.try(:reset_session!)
capybara_session.try(:driver).try(:quit)
我最近添加了一些使用 Capybara::Poltergeist 从使用 JavaScript 的页面获取信息的代码。 (如果可以的话,我很乐意用其他东西代替它)
我加载页面,向其中输入一些数据,单击按钮,等待 return 值。
为了尽量减少内存泄漏、僵尸进程等,我使用以下方法:
Capybara.default_driver = :poltergeist
Capybara.default_max_wait_time = 60
Capybara.javascript_driver = :poltergeist
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, {js_errors: false} )
end
capybara_session = Capybara::Session.new(:poltergeist , timeout: 60 )
我做了一些动作.....
capybara_session.try(:reset_session!)
capybara_session.try(:driver).try(:quit)
Capybara.try(:drivers).try(:clear)
但是我运行几个小时后仍然得到"can't create Thread: Resource temporarily unavailable"
知道如何解决或替换这个问题吗?
这里的主要问题是 Session.new 的不正确使用。 Session.new 的第二个参数应该是正在测试的应用程序,如果传入则触发为该应用程序创建服务器线程。因为你实际上并没有测试一个应用程序,所以参数应该是 nil(它默认为)所以
capybara_session = Session.new(:poltergeist)
timeout: 60
选项在创建时传递给驱动程序。
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, js_errors: false, timeout: 60 )
end
作为对我现在使用的选项的回顾。 似乎是一个很好的性能组合,没有松散的线程。
timeout = 45
Capybara.run_server = false
Capybara.default_max_wait_time = timeout
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
capybara_session = Capybara::Session.new(:poltergeist , timeout: timeout , js_errors: false )
capybara_session.driver.options[:js_errors] = false
capybara_session.driver.options[:timeout] = timeout
capybara_session.driver.options[:debug] = true
capybara_session.driver.options[:phantomjs_logger] = true
capybara_session.driver.options[:stdout] = true
capybara_session.driver.options[:phantomjs_options] = ['--proxy-type=none','--load-images=no','--ignore-ssl-errors=yes','--ssl-protocol=any','--web-security=false','--debug=true']
对会话进行一些操作.........
capybara_session.try(:reset_session!)
capybara_session.try(:driver).try(:quit)