Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将多个rake任务组合成一个rake任务_Ruby On Rails_Rake_Task - Fatal编程技术网

Ruby on rails 将多个rake任务组合成一个rake任务

Ruby on rails 将多个rake任务组合成一个rake任务,ruby-on-rails,rake,task,Ruby On Rails,Rake,Task,而不是像这样单独运行每个rake任务: rake db:drop rake db:create rake db:migrate rake db:load 我想运行一个rake任务来完成所有的任务 这就是我的rakefile: desc 'This rebuilds development db' namespace :rebuild_dev do Rake::Task["db:drop"].execute Rake::Task["db:create"].execute Rake::Tas

而不是像这样单独运行每个rake任务:

rake db:drop
rake db:create
rake db:migrate
rake db:load
我想运行一个rake任务来完成所有的任务

这就是我的rakefile:

desc 'This rebuilds development db'
namespace :rebuild_dev do
 Rake::Task["db:drop"].execute
 Rake::Task["db:create"].execute
 Rake::Task["db:migrate"].execute
 Rake::Task["db:load"].execute
end

当我运行它时,上面的方法不起作用。

您希望
调用
而不是
执行
。从我自己的代码中摘录一小段,展示了如何传递变量:

namespace :clients do

  task :create, [:client] => ["clients:creation:checks"] do |t, args|
    Rake::Task["clients:creation:git"].invoke(client, password)
    Rake::Task["server:virtualhost:create"].invoke(client)
    Rake::Task["server:virtualhost:enable"].invoke(client)
    Rake::Task["server:reload"].invoke
    Rake::Task["db:roles:create"].invoke(client, password)
    Rake::Task["db:create"].invoke(client, client)
    Rake::Task["db:migrate"].invoke(client)
  end

end
或者,您可以使任务依赖于另一个任务,正如我在上文中使用的
:create
依赖于
客户机:creation:checks
所做的那样

只是澄清一下,名称空间是用于对任务进行分组的,因此您必须在名称空间中定义任务,正如我上面所说的。不能简单地从命名空间中调用任务

因此,上面的代码应该是:

desc 'This rebuilds development db'
task :rebuild_dev do
  Rake::Task["db:drop"].invoke
  Rake::Task["db:create"].invoke
  Rake::Task["db:migrate"].invoke
  Rake::Task["db:load"].invoke
end

您可以在没有主体的任务上使用依赖项来完成它

desc 'This rebuilds development db'
task :rebuild_dev => ["db:drop", "db:create", "db:migrate", "db:load"]

将参数传递给子任务时,这将如何工作?为什么
调用
,我可以使用
执行
意味着
执行(客户端)
@amiming-
执行
将仅运行任务,而
调用
将运行任何依赖项。此外,它将仅在需要时运行任务。注:这是8年前的情况;老实说,我不知道从那以后情况是否发生了变化@托弗·范吉奥,谢谢你的回复。
desc 'This rebuilds development db'
task :rebuild_dev => ["db:drop", "db:create", "db:migrate", "db:load"]