2010-04-12 18 views
5

Con Ruby on Rails, ¿hay alguna manera de volcar mi base de datos de producción en un formulario al que pueda acceder la parte de prueba de Rails?Ruby on Rails: accediendo a los datos de la base de datos de producción para probar

Estoy pensando en una manera de convertir la base de datos de producción en accesorios, o una forma de migrar datos de la base de datos de producción a la base de datos de prueba que Rails no eliminará rutinariamente.

Me gustaría utilizar estos datos para una variedad de pruebas, pero lo que más me preocupa es utilizar datos reales con las pruebas de rendimiento, para poder obtener una comprensión realista de los tiempos de carga.

+0

Podría haber una manera de hacer esto con el rubí, pero me gustaría utilizar los comandos de base de datos (como mysqldump) en una tarea de rastrillo en su lugar. – mckeed

+0

Esta es una muy buena pregunta. Desafortunadamente, la mayoría de las soluciones ofrecidas no funcionarán para mí. Hago ciencia, por lo que nuestra base de datos es ENORME, y sería extremadamente difícil probar algunos para generar una base de datos de prueba. ¿Hay alguna forma de ejecutar pruebas unitarias en producción o desarrollo en modo DB de solo lectura? –

Respuesta

0

Puede usar seed.rb dentro de la carpeta db, llene su base de datos de prueba con los datos que necesita. Hay un buen ejemplo disponible en Railscasts: http://railscasts.com/episodes?search=seed

Te recomendamos que guardes tus datos de producción lejos de tus entornos de prueba. ¡Y haz copias de seguridad!

+0

Bueno, estoy imaginando que la producción => prueba compartir datos será un proceso estrictamente unidireccional. En cuanto a db: seed, gracias por la sugerencia, nunca había oído hablar de él antes. Sin embargo, realmente no veo una forma de usar esto para sembrar mi base de datos de prueba con la información de mi base de datos de producción. –

2

Acabamos de tener un problema similar y terminamos escribiendo un método de ayuda en rspec que recupera algunos datos (en nuestro caso, detalles de inicio de sesión para algunas cuentas) de la base de datos de producción.

Lo que sigue debe dar una idea:

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 
Cuestiones relacionadas