3

1.9モードでjruby1.7.0を使用してRails3アプリを実行していますが、ファイルアップロードgemの1つが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'

ここでstackoverflowで同様の問題を見つけました:JRuby Heroku Gemですが、提案された答えは1.8モードでjrubyを実行することです。これは、アプリ全体で1.9の機能と構文を使用しているため実行できません。この例外を修正または回避する方法について、誰かがアイデアや提案を持っていますか?

ありがとう。

4

2 に答える 2

4

さて、これが私のハッキーな解決策です:

これはRailsプロジェクトなので、というファイルを作成してフォルダーexcon_hack.rbに入れました。initializers

module Excon
  DEFAULT_NONBLOCK = false
end

これにより、接続ブロックが作成されますが、これは私には関係ありません。さらに重要なことに、エラーが修正されます。

于 2012-11-20T17:28:42.207 に答える
0

もう1つのオプションは、jruby-opensslを0.7.4にダウングレードすることです。それが効果的にexconをブロッキングモードに戻すのか、それとも単に非ブロッキングが機能するようになるのかはまだわかりません。

于 2012-11-21T18:57:03.093 に答える