2011-01-10 7 views
1

後のRailsで「LOAD DATA LOCALのINFILE」MySQLのクエリを実行することはできません(私はRailsの3は、同様にこの問題を持っていることを確認していないかもしれないと思う):はRailsの2.3.8での接続の再接続

私は時にエラーが出ますデータベースに再接続した後にLOAD DATA LOCAL INFILEクエリを実行しようとしました。私は潜在的に少し時間がかかる可能性のあるファイルを解析するプロセスを持っています。解析中、Mysqlはタイムアウトのために接続を閉じます。これは問題ありません。私はActiveRecord::Base.verify_active_connections!を実行して、接続を元に戻します(私のアプリを通していくつかの場所でこれを行います)。しかし、LOAD DATA LOCAL INFILE文を実行している、私はこのエラーを取得:

Mysql::Error: The used command is not allowed with this MySQL version

それはない許可の問題だ、私は確かにそれを知っています。コンソールで私のテストをチェックアウト:

 
> ActiveRecord::Base.connection.execute("LOAD DATA LOCAL INFILE '/tmp/test.infile' INTO TABLE users") 
[Sat Jan 08 00:09:29 2011] (9990) SQL (1.7ms) LOAD DATA LOCAL INFILE '/tmp/test.infile' INTO TABLE users 
=> nil 

> ActiveRecord::Base.connection.disconnect! 
=> #<Mysql:0x104c6f890> 

> ActiveRecord::Base.verify_active_connections! 
[Sat Jan 08 00:09:58 2011] (9990) SQL (0.2ms) SET SQL_AUTO_IS_NULL=0 
=> {...connection stuff...} 

> ActiveRecord::Base.connection.execute("LOAD DATA LOCAL INFILE '/tmp/test.infile' INTO TABLE users") 
[Sat Jan 08 00:10:00 2011] (9990) SQL (0.0ms) Mysql::Error: The used command is not allowed with this MySQL version: LOAD DATA LOCAL INFILE '/tmp/test.infile' INTO TABLE users 
ActiveRecord::StatementInvalid: Mysql::Error: The used command is not allowed with this MySQL version: LOAD DATA LOCAL INFILE '/tmp/test.infile' INTO TABLE users 
    from ~/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract_adapter.rb:221:in `log' 
    from ~/gems/activerecord-2.3.8/lib/active_record/connection_adapters/mysql_adapter.rb:323:in `execute' 
    from (irb):6 

私はSELECTやその他もろもろのような他のクエリを行うことができる、と私は正しい結果を取得します。私にエラーを与えるのはこれだけです。私は新鮮なレールアプリでこれをテストしました。接続が切断される前に、私は全く同じクエリを実行することができます。

ありがとうございました!

+0

Hmm。エラーメッセージはかなり明確に聞こえますか?これは、MySQLの設定/コンパイル/バージョンの問題ではありませんか? –

答えて

1

I filed a ticketとRailsがあり、解説があります。 Railsの人たちがこれを修正するのを待たなければならないでしょう。

0

問題がmySQL configuration issueのようだ:

If LOAD DATA LOCAL INFILE is disabled, either in the server or the client, a client that attempts to issue such a statement receives the following error message: ERROR 1148: The used command is not allowed with this MySQL version"

は、あなたがチェックする必要があり、様々な設定についてはリンク先のページを参照してください。そのうちの1つは、LOAD DATA INFILEコマンドを無効にするように設定されています。

+0

こんにちはPekka、私の質問に記載されているように、私はこれが許可の問題ではないことを知っています。私がこれを知っている理由は、再接続の前に 'LOAD DATA LOCAL INFILE'を行うことができるからです(私のコンソール出力を見てください)。私は実際にそのコマンドを何度も行うことができます。私はそのエラーが発生したのは**再接続後**です。 – Ngan

+0

@Nganああ、十分に、私はそれをキャッチしませんでした。それは違います。再接続はどのように行われますか?同じサーバーに接続してもよろしいですか? (それが私がこれを説明できる唯一の方法なので) –

+0

私はそれが同じサーバーだと確信しています。ちょうどあなたの典型的な再接続。あなたは簡単にこの問題を自分で複製することができます。新しいRailsプロジェクトを作成し、コンソール出力で行ったことを実行してください。私はRailsでチケットを申請しましたが、どこに行くのかわかります... – Ngan

関連する問題