加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 为什么一个循环中的Rake任务只执行一次?

发布时间:2020-12-16 20:18:05 所属栏目:百科 来源:网络整理
导读:我有rails应用程序连接到多个数据库.我写了如下定制的耙子任务: 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::B
我有rails应用程序连接到多个数据库.我写了如下定制的耙子任务:
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

问题是任务执行db:仅迁移用户[0]用户(集合中的第一个用户),并且没有错误,只是静静地停止…

这是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

我不知道为什么其他用户不能迁移.

解决方法

我忘记了精确的内部结构,但是Rake的工作原理是,如果需要(换句话说一次),调用将只执行每个任务.

尝试在后续调用中调用execute

耙::任务[“分贝:迁移”]执行.

首次通过循环,您将需要调用,因为它首先调用先决条件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读