Ami*_*mir 24 rake ruby-on-rails task
而不是像这样单独运行每个rake任务:
rake db:drop
rake db:create
rake db:migrate
rake db:load
Run Code Online (Sandbox Code Playgroud)
我想运行一个完成所有操作的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
Run Code Online (Sandbox Code Playgroud)
我运行它时上面的方法不起作用.
mad*_*lep 67
您可以通过依赖于没有正文的任务来执行此操作.
desc 'This rebuilds development db'
task :rebuild_dev => ["db:drop", "db:create", "db:migrate", "db:load"]
Run Code Online (Sandbox Code Playgroud)
Top*_*gio 23
你invoke不想要execute.从我自己的代码中摘录一下,展示如何传递变量:
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
Run Code Online (Sandbox Code Playgroud)
或者,你可以让任务依赖于另一个任务,就像我上面所做的那样:create依赖于clients: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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10029 次 |
| 最近记录: |