後の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
やその他もろもろのような他のクエリを行うことができる、と私は正しい結果を取得します。私にエラーを与えるのはこれだけです。私は新鮮なレールアプリでこれをテストしました。接続が切断される前に、私は全く同じクエリを実行することができます。
ありがとうございました!
Hmm。エラーメッセージはかなり明確に聞こえますか?これは、MySQLの設定/コンパイル/バージョンの問題ではありませんか? –