2014-01-21 7 views
5

Ich benutze connection_ninja (https://github.com/cherring/connection_ninja), um eine Verbindung zu einer remote mysql-Datenbank von meiner Rails-Anwendung herzustellen. Ich habe eine Methode in meinem Modell, die eine CSV-Datei lädt mit 'load data local infile ..' von dem Server, auf dem meine Rails-App in die remote mysql db läuft.Aktivieren von local-infile zum Laden von Daten in remote mysql von Rails

Der Code ist wie folgt:

class Product < ActiveRecord::Base 
    @conn = use_connection_ninja(:rl_op) 
    self.table_name = 'RlProduct' 

    def self.update(file_path) 
    sql = "LOAD DATA LOCAL INFILE '#{file_path}' 
      INTO TABLE RlProduct 
      FIELDS TERMINATED BY ',' ENCLOSED BY '\"' 
      LINES TERMINATED BY '\n' 
      (name,price,productId)"    

    @conn.connection().execute(sql) 
    end  
end 

Dies wird mir die folgende Fehlermeldung geben:

Mysql2::Error: The used command is not allowed with this MySQL version: LOAD DATA LOCAL INFILE.. 

ich meinen Schienen-app local-infile=1 in [mysql] Abschnitt /etc/mysql/my.cnf des Servers ausgeführt wird eingestellt haben. Und das erlaubt mir, die Daten in die entfernte Datenbank zu importieren, wenn ich mich direkt auf dem Server in mysql anmelde und dort den Befehl load data local ... ausführe.

Wie kann ich local-infile = 1 auch für meinen Rails-Code setzen?

Antwort

18

fügen Sie diese database.yml:

local_infile: true 
+0

Ich liebe dich! Überall gesucht nach diesem – Kevin

+0

yeah, das ist nicht die am häufigsten verwendete Funktion) genießen;) – trushkevich

+0

wo ich diese Datei finden kann ... Ich benutze mysql Server 5.6 – saikiran

0

Der Benutzer, der diese Abfrage ausführt, sollte FILE Zugriff auf dem Remote-Server haben.

+0

Vielen Dank für die reply.It auf meinem dev Maschine arbeitet. Ich habe gerade ein Problem auf dem Server, auf dem die App bereitgestellt wird. Ich muss local-infile für mysql-Client auf dem Server aktivieren. Ich habe es aktiviert, indem ich den Eintrag in my.cnf wie oben gesättigt. Rails ist dieser Einstellung jedoch nicht bekannt. Wie kann ich es auch für meinen Schienencode aktivieren? –

+0

Sie haben Recht. Der Unterschied ist lokal gegenüber fern. Derselbe Benutzer verhält sich beim Zugriff über localhost oder remote anders. Überprüfen Sie den Host-Wert für diesen Benutzer. Es sollte '%' anstelle von localhost sein. – emaillenin

Verwandte Themen