【发布时间】:2011-06-16 20:38:30
【问题描述】:
我有连接到多个数据库的 Rails 应用程序。我编写了如下所示的自定义 rake 任务:
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
问题是任务只为 users[0] 用户(集合中的第一个用户)执行 db:migrate 并且没有错误,只是静默停止...
这是 rake --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
我不知道为什么其他用户没有被迁移。
【问题讨论】: