4

为什么这个 rake 任务

gems = %w(gem1 gem2 gem3)
namespace :gems do
  namespace :install do
    desc "Runs install:migrations for all gems"
    task :migrations do
      gems.each do |gem_name|
        print "\nInstalling migrations for the #{gem_name} gem...\n"
        Rake::Task["#{gem_name}:install:migrations"].invoke
      end
      print "\n\nGem migrations installed."
    end
  end
end

仅实际运行第一组迁移,无论我使用的 gems/gem ordering/random 调用 reenable 吗?

Installing migrations for the gem1 gem...
Copied migration whatever from gem1
Copied migration whatever from gem1
Copied migration whatever from gem1
Copied migration whatever from gem1

Installing migrations for the gem2 gem...
(nothing)

Installing migrations for the gem3 gem...
(nothing)

Gem migrations installed.
4

1 回答 1

5

invoke方法仅“根据需要”运行,这基本上意味着一旦运行一次,除非重新启用,否则它不会再次运行。

您可以.reenable在每个之后调用.invoke以重置它,或使用.execute命令来运行任务。

需要注意的.execute是,如果您拥有它们,它将不会运行任务的依赖项。

为什么 Rake 不能连续调用多个任务?

如何从 Rake 任务中运行 Rake 任务?

于 2012-10-12T21:42:14.380 回答