SSL 下 Capybara、Puma、Rails 系统测试的 EOFError
EOFError with Capybara, Puma, Rails System Tests under SSL
运行 Rails SSL 下的系统测试表现出奇怪的行为,我不确定这是错误还是设计使然。
这个非常基本的 Example Application 有一个系统测试可以在索引页上查找元素。
git clone https://github.com/frankjmattia/rails-ssl-system-tests.git blorgh
cd blorgh
./bin/setup
此时您必须创建一个自签名证书并指示您的操作系统信任它。
./bin/generate-blorgh-cert blorgh.test
这将生成证书并打印说明以在 Mac OS X 或 Ubuntu 上信任它。这将对 https://blorgh.test
、https://127.0.0.1
和 https://localhost
有效
rake
到运行系统测试
或
rails s
启动服务器,然后导航到 https://localhost:3000
当 运行他们通过测试时,我什至在发出请求之前就收到 Puma 抛出的错误。
% rake
Run options: --seed 43000
# Running:
Capybara starting Puma...
* Version 3.12.1 , codename: Llamas in Pajamas
* Min threads: 1, max threads: 1
* Listening on ssl://127.0.0.1:56260?key=/Users/frankjmattia/src/blorgh/ssl/blorgh.test.key.pem&cert=/Users/frankjmattia/src/blorgh/ssl/blorgh.test.cert.pem
2019-04-28 16:59:48 -0400: SSL error, peer: 127.0.0.1, peer cert: , #<Puma::MiniSSL::SSLError: OpenSSL error: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request - 336027804>
2019-04-28 16:59:49 -0400: SSL error, peer: 127.0.0.1, peer cert: , #<Puma::MiniSSL::SSLError: OpenSSL error: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request - 336027804>
.
Finished in 3.177669s, 0.3147 runs/s, 0.3147 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
2019-04-28 16:59:49 -0400: Read error: #<EOFError: EOFError>
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/client.rb:306:in `try_to_finish'
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/client.rb:119:in `reset'
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/server.rb:486:in `process_client'
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/server.rb:334:in `block in run'
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/thread_pool.rb:135:in `block in spawn_thread'
我认为这是来自 Capybara 服务器检查 responsive?
但我不确定如何证明它或解决它。
此外,即使所有测试都在本地通过,但在 CI 平台(如 SemaphoreCI)上 运行 时它们会挂起。
如果这是一个错误,那是谁的错误?我 倾向于 Capybara,但 不想浪费任何人的时间来提交错误报告,如果我不了解所有事实,或者无法充分描述它的话。
当 Capybara 在等待服务器启动并确定是 http 还是 https 时尝试向服务器发出 http 请求时,OpenSSL 会输出 SSL "error"。收到错误后,Capybara 将作为 https 请求重试。这不是一个实际影响除输出消息以外的任何东西的错误,"error" 没有理由导致 SemaphoreCI 挂起。
如果 Semaphore 使用 docker 平台并且您 运行ning Chrome >= 73 您可能会发现您需要传递命令行选项 --no-sandbox
和 --disable-features='VizDisplayCompositor'
到 Chrome 以便它正确 运行。
No clue what the EOFError is about though it could have to do with you switching app_host while the page is being requested (page load is not guaranteed to be done when visit returns)
不这样做就解决了我的问题。在我的情况下,不需要将额外的选项传递给 chromedriver。
运行 Rails SSL 下的系统测试表现出奇怪的行为,我不确定这是错误还是设计使然。
这个非常基本的 Example Application 有一个系统测试可以在索引页上查找元素。
git clone https://github.com/frankjmattia/rails-ssl-system-tests.git blorgh
cd blorgh
./bin/setup
此时您必须创建一个自签名证书并指示您的操作系统信任它。
./bin/generate-blorgh-cert blorgh.test
这将生成证书并打印说明以在 Mac OS X 或 Ubuntu 上信任它。这将对 https://blorgh.test
、https://127.0.0.1
和 https://localhost
rake
到运行系统测试
或
rails s
启动服务器,然后导航到 https://localhost:3000
当 运行他们通过测试时,我什至在发出请求之前就收到 Puma 抛出的错误。
% rake
Run options: --seed 43000
# Running:
Capybara starting Puma...
* Version 3.12.1 , codename: Llamas in Pajamas
* Min threads: 1, max threads: 1
* Listening on ssl://127.0.0.1:56260?key=/Users/frankjmattia/src/blorgh/ssl/blorgh.test.key.pem&cert=/Users/frankjmattia/src/blorgh/ssl/blorgh.test.cert.pem
2019-04-28 16:59:48 -0400: SSL error, peer: 127.0.0.1, peer cert: , #<Puma::MiniSSL::SSLError: OpenSSL error: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request - 336027804>
2019-04-28 16:59:49 -0400: SSL error, peer: 127.0.0.1, peer cert: , #<Puma::MiniSSL::SSLError: OpenSSL error: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request - 336027804>
.
Finished in 3.177669s, 0.3147 runs/s, 0.3147 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
2019-04-28 16:59:49 -0400: Read error: #<EOFError: EOFError>
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/client.rb:306:in `try_to_finish'
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/client.rb:119:in `reset'
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/server.rb:486:in `process_client'
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/server.rb:334:in `block in run'
/Users/frankjmattia/.asdf/installs/ruby/2.6.2/lib/ruby/gems/2.6.0/gems/puma-3.12.1/lib/puma/thread_pool.rb:135:in `block in spawn_thread'
我认为这是来自 Capybara 服务器检查 responsive?
但我不确定如何证明它或解决它。
此外,即使所有测试都在本地通过,但在 CI 平台(如 SemaphoreCI)上 运行 时它们会挂起。
如果这是一个错误,那是谁的错误?我 倾向于 Capybara,但 不想浪费任何人的时间来提交错误报告,如果我不了解所有事实,或者无法充分描述它的话。
当 Capybara 在等待服务器启动并确定是 http 还是 https 时尝试向服务器发出 http 请求时,OpenSSL 会输出 SSL "error"。收到错误后,Capybara 将作为 https 请求重试。这不是一个实际影响除输出消息以外的任何东西的错误,"error" 没有理由导致 SemaphoreCI 挂起。
如果 Semaphore 使用 docker 平台并且您 运行ning Chrome >= 73 您可能会发现您需要传递命令行选项 --no-sandbox
和 --disable-features='VizDisplayCompositor'
到 Chrome 以便它正确 运行。
No clue what the EOFError is about though it could have to do with you switching app_host while the page is being requested (page load is not guaranteed to be done when visit returns)
不这样做就解决了我的问题。在我的情况下,不需要将额外的选项传递给 chromedriver。