OpenSSL::SSL::SSLError в режиме jruby 1.6.7/1.7.0 1.9
Я запускаю приложение rails 3 с jruby 1.7.0 в режиме 1.9, и когда один из моих драгоценных камней для загрузки файлов пытается установить соединение https, происходит сбой со следующим исключением:
Excon::Errors::SocketError: write would raise (OpenSSL::SSL::SSLError)
from org/jruby/ext/openssl/SSLSocket.java:626:in `syswrite_nonblock'
from /home/x/.rvm/gems/jruby-1.7.0@global/gems/jruby-openssl-0.7.7/lib/1.9/openssl/buffering.rb:375:in `write_nonblock'
from /home/x/.rvm/gems/jruby-1.7.0/gems/excon-0.16.7/lib/excon/socket.rb:139:in `write'
from /home/x/.rvm/gems/jruby-1.7.0/gems/excon-0.16.7/lib/excon/ssl_socket.rb:84:in `write'
from /home/x/.rvm/gems/jruby-1.7.0/gems/excon-0.16.7/lib/excon/connection.rb:243:in `request_kernel'
from /home/x/.rvm/gems/jruby-1.7.0/gems/excon-0.16.7/lib/excon/connection.rb:103:in `request'
from /home/x/.rvm/gems/jruby-1.7.0/gems/fog-1.7.0/lib/fog/core/connection.rb:20:in `request'
from /home/x/.rvm/gems/jruby-1.7.0/gems/fog-1.7.0/lib/fog/rackspace.rb:71:in `authenticate'
from /home/x/.rvm/gems/jruby-1.7.0/gems/fog-1.7.0/lib/fog/rackspace/storage.rb:146:in `authenticate'
from /home/x/.rvm/gems/jruby-1.7.0/gems/fog-1.7.0/lib/fog/rackspace/storage.rb:95:in `initialize'
from /home/x/.rvm/gems/jruby-1.7.0/gems/fog-1.7.0/lib/fog/core/service.rb:68:in `new'
from /home/x/.rvm/gems/jruby-1.7.0/gems/fog-1.7.0/lib/fog/storage.rb:34:in `new'
from /home/x/.rvm/gems/jruby-1.7.0/gems/carrierwave-0.6.2/lib/carrierwave/storage/fog.rb:106:in `connection'
from /home/x/.rvm/gems/jruby-1.7.0/gems/carrierwave-0.6.2/lib/carrierwave/storage/fog.rb:323:in `connection'
from /home/x/.rvm/gems/jruby-1.7.0/gems/carrierwave-0.6.2/lib/carrierwave/storage/fog.rb:335:in `directory'
from /home/x/.rvm/gems/jruby-1.7.0/gems/carrierwave-0.6.2/lib/carrierwave/storage/fog.rb:250:in `store'
Я обнаружил аналогичную проблему в стеке потока: JRuby Heroku Gem, но предлагаемый ответ - запустить jruby в режиме 1.8, чего я не могу сделать, поскольку все наше приложение использует 1.9 функции и синтаксис. У кого-нибудь есть идеи или предложения о том, как исправить или обойти это исключение?
Благодарю.
2 ответа
Итак, вот мое хакерское решение:
Поскольку это проект Rails, я создал файл с именем excon_hack.rb
и положить его в initializers
папка.
module Excon
DEFAULT_NONBLOCK = false
end
Это делает блокировку соединения, что не имеет значения для меня, и что более важно, это исправляет мою ошибку.
Другой вариант - понизить jruby-openssl до 0.7.4. Пока не ясно, эффективно ли это переводит excon в режим блокировки или просто работает без блокировки.