2010-04-12 7 views
5

Z Ruby on Rails, czy istnieje sposób, aby zrzucić moją produkcyjną bazę danych do formularza, do którego może uzyskać dostęp część testowa Rails?Ruby on Rails: Dostęp do produkcyjnych danych bazy danych do testowania

Zastanawiam się, czy można przekształcić bazę danych produkcji w urządzenia, czy też sposób na przeniesienie danych z produkcyjnej bazy danych do testowej bazy danych, która nie zostanie rutynowo usunięta przez Railsy.

Chciałbym użyć tych danych do różnych testów, ale przede wszystkim w mojej głowie jest wykorzystanie rzeczywistych danych z testami wydajności, dzięki czemu mogę uzyskać realistyczne zrozumienie czasów ładowania.

+0

Nie może być sposób to zrobić z rubinem, ale chciałbym użyć komendy bazy danych (jak mysqldump) w zadaniu zamiast natarcia. – mckeed

+0

To naprawdę dobre pytanie. Niestety większość oferowanych rozwiązań nie będzie działać dla mnie. Robię rzeczy naukowe, więc nasza baza danych jest OGROMNA, a próba wygenerowania testowej bazy danych byłaby bardzo trudna. Czy istnieje sposób na przeprowadzanie testów jednostkowych produkcji lub rozwoju w trybie tylko do odczytu DB? –

Odpowiedz

0

Możesz użyć pliku seed.rb w folderze db, wypełnić bazę danych testowych danymi, których potrzebujesz. Na Railscastach dostępny jest ładny przykład: http://railscasts.com/episodes?search=seed

Zaleca się jednak zachowanie danych produkcyjnych w środowisku testowym. I rób kopie zapasowe !!!

+0

Cóż, wyobrażam sobie, że produkcja => testowe udostępnianie danych będzie procesem ściśle jednokierunkowym. Jeśli chodzi o db: seed, dziękuję za cynk, nigdy wcześniej o tym nie słyszałem. Jednak nie widzę sposobu, aby użyć tego do wysiania mojej testowej bazy danych z informacjami z mojej bazy danych produkcji? –

2

Po prostu mieliśmy podobny problem i zakończyliśmy pisanie metody pomocniczej w rspec, która pobiera niektóre dane (w naszym przypadku dane logowania dla niektórych kont) z produkcyjnej bazy danych.

Poniższy powinno dać wyobrażenie:

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