Tengo una aplicación de rieles que se conecta a múltiples bases de datos. Escribí tarea rastrillo costumbre que tiene este aspecto:¿Por qué una tarea de Rake en un ciclo se ejecuta solo una vez?
task :migrate_accounts_schema => [:environment] do |t|
users = User.find :all, :conditions => ["state = 2"], :order => "id asc"
users.each do |user|
if user.state == 2
ActiveRecord::Base.establish_connection(
:adapter => "postgresql",
:host => user.database_host,
:port => user.database_port,
:username => user.subdomain,
:password => "#{user.database_password}",
:database => user.database_name
)
Rake::Task["db:migrate"].invoke
end
end
end
El problema es que la tarea se ejecuta db: migrate sólo para los usuarios [0] usuario (primer usuario en la colección) y no hay ningún error, simplemente stoppes en silencio .. .
Aquí está la salida del rastrillo --trace
** Invoke app:migrate_accounts_schema (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute app:migrate_accounts_schema
** Invoke db:migrate (first_time)
** Invoke environment
** Execute db:migrate
** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
** Invoke db:migrate
no tengo ni idea de por qué el resto de usuarios no consigue migrar.
Comprobar la fuente [aquí] (http://rake.rubyforge.org/classes/Rake/Task.html) – lebreeze
Se trabajó :) :) de agradecimiento –
Esto parece muy contrario a la intuición para mí. ¿Alguna idea de por qué lo hicieron así? – marcovtwout