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

前端之家收集整理的这篇文章主要介绍了ruby – 为什么一个循环中的Rake任务只执行一次?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有rails应用程序连接到多个数据库.我写了如下定制的耙子任务:
  1. task :migrate_accounts_schema => [:environment] do |t|
  2. users = User.find :all,:conditions => ["state = 2"],:order => "id asc"
  3. users.each do |user|
  4. if user.state == 2
  5. ActiveRecord::Base.establish_connection(
  6. :adapter => "postgresql",:host => user.database_host,:port => user.database_port,:username => user.subdomain,:password => "#{user.database_password}",:database => user.database_name
  7. )
  8. Rake::Task["db:migrate"].invoke
  9. end
  10. end
  11. end

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

这是rake –trace的输出

  1. ** Invoke app:migrate_accounts_schema (first_time)
  2. ** Invoke environment (first_time)
  3. ** Execute environment
  4. ** Execute app:migrate_accounts_schema
  5. ** Invoke db:migrate (first_time)
  6. ** Invoke environment
  7. ** Execute db:migrate
  8. ** Invoke db:schema:dump (first_time)
  9. ** Invoke environment
  10. ** Execute db:schema:dump
  11. ** Invoke db:migrate

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

解决方法

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

尝试在后续调用调用execute

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

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

猜你在找的Ruby相关文章