7

我知道我可以通过以下方式调用子任务列表,并让每个任务都使用我项目的 Rails 环境:

task :main_task => [:sub_task1, :sub_task2] do
end

task :sub_task1 => :environment do
  Model1.some_class_method
end

task :sub_task2 => :environment do
  Model2.some_class_method
end


我的问题是

  1. 有什么办法:main_task可以通过,:environment这样我就不必明确地将它放在每个子任务中?
  2. 有没有办法让子任务被认为是“私有的”?也就是说,我不希望单独显式调用它们。他们只会从:main_task. 基本上我需要从一个数据库(SQLServer)中读取数据并填充另一个数据库(MySQL - Rails 项目的数据库),但我想将“读取”任务与“填充”任务分开以提高可读性。
4

1 回答 1

7

您可以:environment在其他两个任务之前在父任务中列出一次任务,使其仅列出一次。

task :main_task => [:environment, :sub_task1, :sub_task2] do
end

没有“私人”任务,但是您可以rake -T通过不在它们上方放置一条desc线来防止它们被列出。如果直接调用它们(检测父母所做的事情或类似的事情),您可以通过抛出异常来手动强制它们。

但是,您可能会有更好的时间将代码放在不直接公开为 rake 任务的共享方法或类中。

于 2013-02-04T19:35:24.573 回答