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
on 15.08.2008 12:54
on 15.08.2008 13:13
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:
on 15.08.2008 13:41
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
on 15.08.2008 13:43
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: