2012-02-25 6 views
2

Help!ランダムな時間のように思えるところで、「MySQLサーバーが去ってしまった」というエラーが出てきます。同じ労働者が時々走り、次にこの方法でクラッシュします。私は狂気にパターンを見つけるように見えることはできません。Rails 3.1.0とResque - "Mysql2 :: Error:MySQLサーバーがなくなりました"

私は、次の解決方法を試してみました:私の各タスクのメソッドを実行中

ActiveRecord::Base.verify_active_connections! 

を、resque faqあたりとして。

私もこのコードを試みた:初期における

adapter = ActiveRecord::Base.configurations[Rails.env]['adapter'] 

if adapter == "mysql2" 
module ActiveRecord::ConnectionAdapters 
    class Mysql2Adapter 
    alias_method :execute_without_retry, :execute 

    def execute(*args) 
     execute_without_retry(*args) 
    rescue ActiveRecord::StatementInvalid => e 
     if e.message =~ /server has gone away/i 
     warn "Server timed out, retrying" 
     reconnect! 
     retry 
     else 
     raise e 
     end 
    end 
    end 
end 
end 

を、per code by a Resque developerように、他の場所StackOverflowの上にあるいくつかの変更を加えて。

私も上記の両方を試しました。結果は同じです。

wait_timeout: 2147483をdatabase.ymlに設定してみましたが、this StackOverflow postは利用できません。

私が使用しています:

  • レール3.1.0
  • resque 1.20.0
  • resque-スケジューラ1.9.9
  • mysql2 0.3.11

すべてが実行されていますRVM/Homebrew/Passengerを搭載したMacで。 mysqlデータベースは自分のマシンのローカルです。ここで

は、エラーの例です:

Mysql2::Error: MySQL server has gone away: SHOW FIELDS FROM `m_variables` 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `query' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `block in execute' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.0/lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `execute' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:473:in `columns' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `block (2 levels) in initialize' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:185:in `with_connection' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:92:in `block in initialize' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:106:in `yield' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:106:in `default' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:106:in `block in initialize' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/base.rb:711:in `yield' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/base.rb:711:in `default' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/base.rb:711:in `columns_hash' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/locking/optimistic.rb:145:in `locking_enabled?' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/relation.rb:110:in `to_a' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/relation/finder_methods.rb:155:in `all' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/base.rb:441:in `all' 
/Users/fdot/Sites/mq/app/workers/m_variable_type_assigner.rb:25:in `perform' 

、ここでは別の例である:

Mysql2::Error: MySQL server has gone away: SELECT `users`.* FROM `users` 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:687:in `query' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:687:in `block in exec_query' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.0/lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:685:in `exec_query' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:679:in `select' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:18:in `select_all' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/base.rb:470:in `find_by_sql' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/relation.rb:111:in `to_a' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/relation/finder_methods.rb:155:in `all' 
/Users/fdot/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/base.rb:441:in `all' 
/Users/fdot/Sites/mq/app/workers/transient_user_cleaner.rb:21:in `perform' 

私はここで途方に暮れてよ。助けが大いにありがとう!

答えて

0

これは、接続が多すぎてmysqlが処理できない場合に発生します。

実行している接続と処理の数を制限してください。並列に走るのではなく、いくつかの要求を連続して実行してください。

これは、むしろあなたの言語やフレームワークのエラーよりも、MySQLエラーの詳細です:いいえ、これはResqueとMySQLとの共通の問題です詳細

+0

ためhereを参照してください。 Resqueは再接続しません... – rrauenza

関連する問題