Ruby Forum Rails Germany > SQL-Anweisungen auf einmal ausführen?

Posted by Jan Luehr (Guest)
on 15.08.2008 12:54
(Received via mailing list)
Hallo,

ich habe einen kleinen rake-Task geschrieben, der vor dem Testen 
Testdaten in
die Datenbank schreibt:
http://pastie.org/253485
Was dabei nervig ist, dass ich auf die Schleife (Zeile 6-8) angewiesen 
bin, da
Zeile 9 (auskommentiert) knallt, wenn Das SQL-File mehr als eine 
Anweisung
hat.
Problematisch ist nur, dass der Split (Zeile 2) bricht, wenn im SQL in 
einem
Daten- oder Kommentarfeld ein ; steht.
Gibt es eine Möglichkeit, das ganze SQL-File einfach in die Datenbank zu
schreiben?

Danke,
Keep smiling
yanosz
Posted by Christian Albrecht (Guest)
on 15.08.2008 13:13
(Received via mailing list)
hi,
vielleicht sind fixtures was für diese aufgabe.

http://biodegradablegeek.com/2008/07/how-to-use-fixtures-to-populate-your-database-in-rails/

besten gruß,

christian

Am 15.08.2008 um 12:53 schrieb Jan Luehr:
Posted by Mathias Meyer (Guest)
on 15.08.2008 13:41
(Received via mailing list)
On 15.08.2008, at 12:53, Jan Luehr wrote:

> hat.
> Problematisch ist nur, dass der Split (Zeile 2) bricht, wenn im SQL  
> in einem
> Daten- oder Kommentarfeld ein ; steht.
> Gibt es eine Möglichkeit, das ganze SQL-File einfach in die  
> Datenbank zu
> schreiben?
>
Wie waer's denn mit einem einfachen Aufruf vom mysql-Client aus dem
Rake-Task heraus? Muss man sich um die Details nicht mehr kuemmern.

Alternativ versteht das Ruby/MySQL Gem auch die Option, das Ausfuehren
mehrerer Statements in einer Query zu aktivieren:
ActiveRecord
::Base.connection.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON)
(ungetestet). Bleibt noch zu testen, wie sich das mit Kommentaren
verhaelt.

Fuer (spaerliche) Details dazu siehe http://www.tmtm.org/en/mysql/ruby/

Cheers, Mathias
--
// Mathias Meyer
// PAPERPLANES SOFTWARE.ENTWICKLUNG
// www.paperplanes.de
// Gabriel-Max-Str. 3, 10245 Berlin
// meyer.at.paperplanes.de, 0163.765.27.47
Posted by Phillip Oertel (phillipoertel)
on 15.08.2008 13:43
(Received via mailing list)
hallo,

sql   = "BEGIN; #{File.read('db/test_data.sql')}; COMMIT;"
cmd = "mysql -u user_name -D database_name -e '#{sql}'"
`cmd`

sollte funktionieren. in nem rake task fände ich das auch legitim. die
db-zugangsdaten kannst du dir aus der database.yaml holen:

rails_env =  ENV['RAILS_ENV'] || 'development'
db_config = YAML.load(File.read("config/database.yml"))[rails_env]

ist natürlich nicht so schön, wie es in direkt in ruby zu machen, aber
sicher schneller. der rake-task benötigt jetzt den mysql-client auf
dem rechner.

wie schon vorgeschlagen könntest du die daten im dump auch in fixtures
konvertieren, vielleicht bieten sich hier CSV-fixtures an -- 
http://ar.rubyonrails.org/classes/Fixtures.html

viele 
grüße,phillip

--

Am 15.08.2008 um 12:53 schrieb Jan Luehr: