module ActiveRecord
module ConnectionAdapters
class MysqlAdapter
private
def connect_with_local_infile
@connection.options(Mysql::OPT_LOCAL_INFILE, 1)
connect_without_local_infile
end
alias_method_chain :connect, :local_infile
end
end
end
お世話になります。久野と申します。 railsにて大量データの取り込みの必要があったため、LOAD DATA INFILE構文の 利用を試みたところ、 以下のエラーが発生して取り込みに失敗しました。 ActiveRecord::StatementInvalid: Mysql::Error: #42000The used command is not allowed with this MySQL version: LOAD DATA LOCAL INFILE '/path/to/file' ・DBへの接続ユーザにFILE権限があることは確認しています。 ・コマンドラインからの直接実行はOKでした。 ぐぐったところ、クライアント側にも許可が必要との情報がありました。 それによると、以下のように明示的にINFILE取り込み許可を与えれば良いとのこ とでした。 $ mysql --local-infile=1 このオプションを例えばdatabase.ymlに指定する方法はありますでしょうか。 もしくは別途解決方法が有りましたら教えてください。 ■実行コード query = <<-SQL LOAD DATA LOCAL INFILE '/path/to/file' INTO TABLE table CHARACTER SET sjis FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES ( ... ); SQL ActiveRecord::Base.connection.execute(query) ■実行環境 $ rails -v Rails 2.1.1 $ mysql --version mysql Ver 14.12 Distrib 5.0.96, for unknown-linux-gnu (x86_64) using readline 5.1 -- ML: rails@ruby.ml.fdiary.net 使い方: http://QuickML.com/