2010-04-12 6 views
5

Mit Ruby on Rails gibt es eine Möglichkeit für mich, meine Produktionsdatenbank in ein Formular zu speichern, auf das der Testteil von Rails zugreifen kann?Ruby on Rails: Zugriff auf Produktionsdatenbankdaten zum Testen

Ich denke entweder eine Möglichkeit, die Produktionsdatenbank in Fixtures zu verwandeln, oder eine Möglichkeit, Daten aus der Produktionsdatenbank in die Testdatenbank zu migrieren, die von Rails nicht routinemäßig gelöscht wird.

Ich möchte diese Daten für eine Vielzahl von Tests verwenden, aber in erster Linie verwende ich reale Daten mit den Leistungstests, so dass ich ein realistisches Verständnis der Ladezeiten bekommen kann.

+0

Es könnte ein Weg sein, diese mit Ruby zu tun, aber ich würde Datenbankbefehle (wie mysqldump) in einer Harke Aufgabe stattdessen verwenden. – mckeed

+0

Das ist eine wirklich gute Frage. Leider funktionieren die meisten angebotenen Lösungen nicht für mich. Ich mache wissenschaftliches Zeug, also ist unsere Datenbank RIESIG, und es wäre extrem schwierig, einige zu testen, um eine Testdatenbank zu erstellen. Gibt es eine Möglichkeit, Komponententests für die Produktion oder Entwicklung im schreibgeschützten DB-Modus auszuführen? –

Antwort

0

Sie können die seed.rb im db-Ordner verwenden und Ihre Testdatenbank mit den benötigten Daten füllen. Es gibt ein schönes Beispiel für Railscasts: http://railscasts.com/episodes?search=seed

Ich würde Ihnen jedoch empfehlen, Ihre Produktionsdaten von Ihren Testumgebungen fernzuhalten. Und mache Backups !!!

+0

Nun, ich stelle mir vor, dass die Produktion => testing die gemeinsame Nutzung von Daten wird ein strikt in eine Richtung Prozess sein. In Bezug auf db: Samen, danke für den Tipp, ich hatte noch nie zuvor davon gehört. Ich sehe jedoch keine Möglichkeit, meine Testdatenbank mit den Informationen aus meiner Produktionsdatenbank zu versorgen. –

2

Wir hatten gerade ein ähnliches Problem und schrieben eine Hilfsmethode in rspec, die einige Daten (in unserem Fall Anmeldedaten für einige Konten) aus der Produktionsdatenbank holt.

Die folgende Beschreibung ist eine Idee:

require 'yaml' 

def accounts 
    @accounts ||= lambda { 
    config = YAML.load_file("#{Rails.root}/config/database.yml")['production'] 

    dbh = Mysql.real_connect(config['host'], config['username'], config['password'], config['database']) 

    accounts = [] 
    result = dbh.query("SELECT `accounts`.* FROM `accounts`") 
    while row = result.fetch_hash do 
     row.delete("id") 
     accounts << Account.make(row) 
    end 

    dbh.close 

    return accounts 
    }.call 
end