2012-03-19 11 views
7

Estoy intentando ejecutar rake db:test:prepare desde otra tarea.Ejecución de db: prueba: preparación de otra tarea de rastreo

namespace :db do 
    namespace :populate do 
    desc "Seed development database" 
    task development: :environment do 
     puts "Kill local server" 
     %x{ ps xauwww | grep -i --regex="[t]hin" | awk '{print $2}' | xargs kill } 
     puts "Resetting development database" 
     Rake::Task['db:reset'].execute 
     puts "Migrating development database" 
     Rake::Task['db:migrate'].execute 
     puts "Populating development database" 
     Rake::Task['db:populate'].execute 
     puts "Pepare test database" 
     Rake::Task['db:test:prepare'].execute 
     puts "Start local server" 
     system 'thin -d start' 
    end 
    … 
end 

Usar invocación en lugar de execute no ayuda. Parece que funciona bien si lo defino por sí mismo:

task example: :environment do 
    Rake::Task['db:test:prepare'].execute 
end 

Cuando corro rake db:populate:development, todas las tareas se ejecutan a excepción de Rake::Task['db:test:prepare'].execute. No hay actividad en el registro de desarrollo para ese comando, pero no impide que la siguiente tarea se ejecute (iniciando el servidor). Por lo general, veo algunas declaraciones SQL cuando ejecuto db:test:prepare por sí mismo.

Notas:

$ rails -v 
Rails 3.2.2 

$ ruby -v 
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0] 

$ uname -a 
Darwin hook 11.3.0 Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64 

Respuesta

0

Trate Rake::Task['db:test:prepare'].invoke en lugar de .execute, para que se ejecute tareas dependientes primera. Pero solo invoca la tarea si no se invoca primero.

Consulte: this

+0

Tengo el mismo problema, y ​​esto no lo resuelve por mí. – jrdioko

1

Sé que esto no es la forma correcta de hacerlo, pero yo estaba teniendo problemas similares y terminaron llamándolo usando:

`rake db:test:prepare` 

Este es el único método que pareció funcionar para mí

0

La tarea de Rake probablemente llegue a esta línea https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364 y ActiveRecord::Base.configurations está en blanco. Esta variable se establece aquí https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L5 (ver https://github.com/rails/rails/blob/370e1ad3f1f30f955bd781f0ecd113409b8ccf8f/activerecord/lib/active_record/tasks/database_tasks.rb#L21).

¿Existe la posibilidad de que su database.yml no tenga el entorno actual o hay algo más que borre la configuración?

+0

Buena idea, pero tampoco lo es. El 'database.yml' está configurado correctamente y comprobar' ActiveRecord :: Base.configurations.blank? 'En mi tarea personalizada de rake devuelve' false'. – jrdioko

+0

¿Dónde coloca la declaración de depuración? ¿Podría intentar agregarlo inmediatamente antes de la línea https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364? – gwintrob

+0

Acabo de probar eso y todavía tengo 'falso'. Y con el depurador pude pasar y confirmar que estaba ingresando la cláusula 'a menos' (y desde allí ingresé en los componentes internos de Rails que no entiendo del todo). – jrdioko

Cuestiones relacionadas