現象
- タイムアウトの時間はデフォルトで90秒
- 何回か回していると高確率で以下のエラーがでるようになった
- 90秒以内にSauceLabsとの接続が完了しなかったと。。
- 自分の環境では本当に時間が足りていないのではないかという疑いが
- そこで、タイムアウトの時間をのばしてみると以降このエラーはでなくなったのでメモメモ
- 実行しているのはEC2@small instance
- なんでこんなに接続に時間がかかっているのかは不明
- ちなみにTravis+Saucelabsで動かしているときにもたまに目にした
[Connecting to Sauce Labs...]
Sauce Connect failed to connect after 90 seconds (RuntimeError)
/home/ec2-user/.rvm/gems/ruby-1.9.3-p547/gems/sauce-connect-3.4.1/lib/sauce/connect.rb:119:in `wait_until_ready'
/home/ec2-user/.rvm/gems/ruby-1.9.3-p547/gems/sauce-3.4.9/lib/sauce/utilities/connect.rb:20:in `start'
/home/ec2-user/.rvm/gems/ruby-1.9.3-p547/gems/sauce-cucumber-3.4.0/lib/sauce/cucumber.rb:71:in `around_hook'
/home/ec2-user/.rvm/gems/ruby-1.9.3-p547/gems/sauce-cucumber-3.4.0/lib/sauce/cucumber.rb:162:in `Around'
対応
- sauce_helper.rbに以下を追加するだけ
- デフォルト90 -> 270に変更
features/support/sauce_helper.rb
require 'sauce/connect'
Sauce::Connect::TIMEOUT = 270
- 以下のようにsauce_helper.rbに一行追加してもだめだったので注意!
features/support/sauce_helper.rb
require "sauce"
require 'sauce/capybara'
require "sauce/cucumber"
Capybara.default_driver = :sauce
Sauce.config do |c|
c[:browsers] = [
["Windows 8", "Internet Explorer", "10"],
["Windows 7", "Firefox", "20"],
["OS X 10.8", "Safari", "6"],
["Linux", "Chrome", nil]
]
c[:idle_timeout] = 120 # <= 90秒(デフォルト)から120秒に変更
end
メモ
- sauce-connectのバージョンは3.1.0と2014/08/21現在の3.3.1とではタイムアウトまわりの部分が結構変わっていた
3.1.0と3.3.1との違い
lib/sauce/connect.rb
### 一部を抜粋
module Sauce
class Connect
TIMEOUT = 90
def initialize(options={})
@timeout = options.fetch(:timeout) { TIMEOUT } #<= ここが追加されている
end
def wait_until_ready
start = Time.now
while !@ready and (Time.now-start) < @timeout and @error != "Missing requirements"
sleep 0.5
end
...
~ただの宣伝~
- 全国のSeleniumer必読
- Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください