1

Heroku でホストされている Rails アプリで、バックグラウンド プロセスで実行され、遅い政府の Web サイトを呼び出す操作があります。修正できなかったタイムアウト エラー (下の下部) が表示されます。

読み取りタイムアウトは、リクエストの 20 秒後に発生するようです。

次の行で問題が発生します。

Mechanize.new.get('http://ai.fmcsa.dot.gov/SMS/Data/Search.aspx')

これを修正する環境変数はありますか? 私が見逃している何か他のものはありますか?

Errno::ETIMEDOUT: Connection timed out - connect(2)
    from /app/vendor/bundle/ruby/1.9.1/gems/net-http-persistent-2.7/lib/net/http/persistent/ssl_reuse.rb:29:in `initialize'
    from /app/vendor/bundle/ruby/1.9.1/gems/net-http-persistent-2.7/lib/net/http/persistent/ssl_reuse.rb:29:in `open'
    from /app/vendor/bundle/ruby/1.9.1/gems/net-http-persistent-2.7/lib/net/http/persistent/ssl_reuse.rb:29:in `block in connect'
    from /usr/local/lib/ruby/1.9.1/timeout.rb:44:in `timeout'
    from /usr/local/lib/ruby/1.9.1/timeout.rb:89:in `timeout'
    from /app/vendor/bundle/ruby/1.9.1/gems/net-http-persistent-2.7/lib/net/http/persistent/ssl_reuse.rb:29:in `connect'
    from /usr/local/lib/ruby/1.9.1/net/http.rb:637:in `do_start'
    from /usr/local/lib/ruby/1.9.1/net/http.rb:632:in `start'
    from /app/vendor/bundle/ruby/1.9.1/gems/net-http-persistent-2.7/lib/net/http/persistent.rb:768:in `reset'
    from /app/vendor/bundle/ruby/1.9.1/gems/net-http-persistent-2.7/lib/net/http/persistent.rb:503:in `connection_for'
    from /app/vendor/bundle/ruby/1.9.1/gems/net-http-persistent-2.7/lib/net/http/persistent.rb:806:in `request'
    from /app/vendor/bundle/ruby/1.9.1/gems/mechanize-2.5.1/lib/mechanize/http/agent.rb:258:in `fetch'
    from /app/vendor/bundle/ruby/1.9.1/gems/mechanize-2.5.1/lib/mechanize.rb:407:in `get'
    from /app/app/models/inspection.rb:14:in `fmcsa_summary'
    from (irb):5
    from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands/console.rb:47:in `start'
    from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands/console.rb:8:in `start'
    from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
4

1 に答える 1

1

一時的な修正として機能した解決策は、Mechanize 経由でプロキシ サーバーを使用することでした。接続しているサーバーと Heroku EC2 インスタンスの IP アドレス範囲の間で何かが起こっているに違いありません。

agent = Mechanize.new { |a| a.set_proxy(url,port,username,password) }

誰かが元の問題の根本原因を知っていれば、それでも役に立ちます。

于 2012-08-04T13:21:04.280 に答える