0

Sequel::PoolTimeout私が作成した Ruby スクリプトで、次のエラーの原因を特定できませんでした。

Sequel::PoolTimeout: Sequel::PoolTimeout
             hold at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/connection_pool/threaded.rb:100
             hold at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/connection_pool/threaded.rb:93
      synchronize at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/database/connecting.rb:234
          execute at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/adapters/jdbc.rb:258
          execute at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/dataset/actions.rb:793
       fetch_rows at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/adapters/jdbc.rb:671
             each at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/dataset/actions.rb:143
    single_record at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/dataset/actions.rb:583
     single_value at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/dataset/actions.rb:591
              get at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/dataset/actions.rb:250
           empty? at /Users/username/.rvm/gems/jruby-1.7.4@all/gems/sequel-4.2.0/lib/sequel/dataset/actions.rb:153
            scrap at /Users/username/projectname/processers/get_category.rb:46
             each at org/jruby/RubyArray.java:1617
  each_with_index at org/jruby/RubyEnumerable.java:920
            scrap at /Users/username/projectname/processers/get_category.rb:44
            scrap at /Users/username/projectname/processers/get_category.rb:32

MRI と JRuby の両方でこれを試してみましたが、まったく同じ結果が得られました。

こちらのSequel gemの説明に従って、次のように制限を引き上げようとしました。pool_timeout

DB = Sequel.connect("jdbc:mysql://localhost/project_db?user=USERNAME&password=PASSWD&max_connections=10&pool_timeout=120")

max_connectionsandが認識されないように見えpool_timeoutますが、これらの引数を接続に渡す他の方法は見当たりません。

ここで問題になっている実際のコードは次のとおりです。 if DB[:products].where(url: url.to_s).empty?

コードが少しの間は問題なく動作するのを見てきましたが、すぐに失敗するか、数分後に失敗し、いつ発生するかという点で再現性がありません。これは MySQL の構成の問題か、localhostDBMS の遅延が長引いている原因ではないかと考え始めていますが、手動クエリなどで確認できる目に見えるタイムアウトを手動で再現することはできません。

タイムアウトが発生し続ける理由、またはより具体的には、Sequel適切な設定を供給する (おそらく不正な引数リストがある) か/etc/my.cnf、そのようなシナリオで MySQL を変更することによって解決する方法について、この問題に関するアイデアはありますか?

4

1 に答える 1

1

Sequel jdbc アダプターは、接続文字列を直接 JDBC に渡します。埋め込みオプションを解析しません。あなたがする必要があります:

DB = Sequel.connect("jdbc:mysql://localhost/project_db?user=USERNAME&password=PASSWD", :max_connections=>10, :pool_timeout=>120)

于 2013-09-16T19:16:51.220 に答える