[前][次][番号順一覧][スレッド一覧]

rails:3804

From: 久野@サイベイト <hisano@s...>
Date: Fri, 07 Sep 2012 16:40:37 +0900
Subject: [rails:3804] Re: railsでLOAD DATA INFILE

お世話になります。久野と申します。

自己解決しましたのでご報告いたします。

原因は予想通りクライアント側に取り込み権限がない点でした。
config/environment.rbに以下のコードを追加することで問題なく取り込めました。

|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|


■参考URL
https://rails.lighthouseapp.com/projects/8994/tickets/6266-cannot-execute-mysql-load-data-infile-query-after-using-verify_active_connections#ticket-6266-12


※なかなか見つからなかった解決法が、相談したあとすぐに見つかるのはなぜだ
ろう?


(2012/09/07 15:49), 久野 wrote:
> お世話になります。久野と申します。
>
>
> 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@r...
> 使い方: http://QuickML.com/
>



添付ファイル

[前][次][番号順一覧][スレッド一覧]

      3803 2012-09-07 08:49 [hisano@s...         ] railsでLOAD DATA INFILE                 
-> @  3804 2012-09-07 09:40 ┗[hisano@s...         ]