2011-02-10 28 views
1

私は postgresから開発したrails 3.0.3アプリケーションのデータベースを切り替えていますので、amazonのrds 。私が を変更する前に、私の開発マシンでmysql2アダプタを使って マシンにmysqlを使ってテストコードを実行していました。私のテストコードでは、あとでまだ得られていないエラー が投げられています。 基本的には、大きなxmlのアップロードを保存するためのモデルがあります。マイ テストコードを作成する行は、次のエラーpostgresからmysqlに奇妙なエラーが発生しました。Mysql2 :: Error:MySQLサーバーがなくなりました

ActiveRecord::StatementInvalid: Mysql2::Error: SAVEPOINT active_record_1 does not exist:  ROLLBACK TO SAVEPOINT active_record_1 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/connection_adapters/abstract_adapter.rb:202:in `rescue in log' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:194:in `log' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/ active_record/connection_adapters/mysql2_adapter.rb:314:in `execute' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/ active_record/connection_adapters/mysql2_adapter.rb:358:in `rollback_to_savepoint' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/connection_adapters/abstract/database_statements.rb: 149:in `rescue in transaction' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/connection_adapters/abstract/database_statements.rb: 127:in `transaction' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:204:in `transaction' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:287:in `with_transaction_returning_status' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:237:in `block in save' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:248:in `rollback_active_record_state!' 
/Users/conor/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/ active_record/transactions.rb:236:in `save' 
.... 

私はテキストフィールドにファイルの内容を保存されているが投げているこの

test "xml upload for large file" do 
    file = File.new("test/files/lib/upload_sample.xml") 
    upload = XmlUpload.create(:xml_contents => contents = file.read) 
    ..... 
    ..... 
end 

ようになります。私はそれを実現する 私は真剣にs3のファイルを格納するのを見なければならないが、これは私が現時点で持っている の設定です。 postgresのではすべてが 罰金働いたが、MySQLで動作するように物事を得るために私が設定する必要がありました:制限 変数をLONGTEXTではなく、標準のテキスト フィールドを使用したことになります。ファイルが非常に大きくなることができますが、私は小さなファイルを使用してテストするとき 問題はありません

私は完全に間違ってツリーを吠えことができるが、私は 問題は、データベース接続によって引き起こされる可能性があることを疑う

はドロップに をベースとしています私は、開発 モードでファイルをアップロードしようとするとエラーが投げ。私はこのエラーをチェックして、何が接続を切断する可能性があるのか​​分かりません。ファイルは8時間(デフォルトの接続のドロップタイム)で挿入されません。

Mysql2 ::エラー:MySQLサーバーが終了しました離れ:xml_uploads ........

。INSERT INTOマイdatabase.yamlの設定は次の通りです。

test: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: true 
    database: app_test 
    username: username 
    password: password 
    host: localhost 

誰もが問題があると、それは固定 できるか何にとして任意の手掛かりを持っていますか?これに関する助けがあれば大いに感謝します。

+0

コナーにそれを調整する上でいくつかの情報があり、私は、Javaと私と何年か前にこの問題を持っていました問題が何であったかを正しく覚えていない。しかし、私はサーバーを過負荷にしていたことを覚えています(おそらく、トランザクションはサーバーにとって大きすぎます)、そしてそれは "サーバーがなくなった"というメッセージで応答を停止しました。あなたは小さなデータセットでこれを試しましたか?または小さなファイルですか? – Augusto

+0

こんにちはアウグスト、あなたの返事をありがとう。私は小さなファイルでテストを試みましたが、すべてが円滑に実行されますが、アップロードできるデータの種類を代表するテストファイルが失敗します。これらのファイルは大きく(1.5-2.5mb)、何も狂っていません。私は接続がタイムアウトして挿入前に削除されていると思うが、なぜそれがあるのか​​分からない。 – Conor

+0

mysqlで非常に大きなタイムアウトを設定しようとすると - 詳細はこちらhttp://dev.mysql.com/doc/ refman/5.0/ja/gone-away.html – ajreal

答えて

3

私はとにかくS3にデータを格納して行くことにしましたが、友人は、この問題の解決の方向に私を指すなかった、私はそれをテストし、それが働いていたので、私は、私はケースの誰にそれをここに投稿しなければならないと思いましたそうでなければ同じ問題が発生します。

基本的に問題はブログ/テキストフィールドのサイズより小さいものに設定されているのmax_allowed_pa​​cket変数によって引き起こされます。クエリが実行されないため、接続が切断されます。ここで

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_allowed_packet

変数のmax_allowed_pa​​cketに関するいくつかの詳細ともRDSインスタンス

http://www.henrybaxter.ca/?p=111

関連する問題