RAKE元编程:如何从列表创建多个任务 [英] Rake metaprogramming: How to create multiple tasks from list
本文介绍了RAKE元编程:如何从列表创建多个任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
实际上我想要的是Capstrano脚本(它是基于rake的)。
如何转换多个任务,如下所示:
desc 'Runs rake db:seed'
task :seed do
on roles :db do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, "db:seed"
end
end
end
end
如下所示:
task_list = %i(
db:seed
db:reset
db:migrate
db:seed:testusers
db:seed:testorders
)
task_list.each do |task_name|
desc %(Runs rake #{task_name})
task :task_name do
on roles :db do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, task_name
end
end
end
end
end
我的问题是task_name
被用作任务定义中某个环境设置的键。
如何以这种方式定义多个任务?
推荐答案
如何:
task_list = %i(
db:seed
db:reset
db:migrate
db:seed:testusers
db:seed:testorders
)
task_list.each do |task_name|
desc %(Runs rake #{task_name})
task {task_name => [:set_rails_env]} do
on primary fetch(:migration_role) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, task_name
end
end
end
end
end
编辑:看到您将签名从task_name: [:dependency]
更改为更简单的task_name
,您必须执行以下操作:
task_list.each do |task_name|
desc %(Runs rake #{task_name})
task task_name do
...
end
end
出现上述情况的原因是task_name: :foo
是:task_name => :foo
的句法糖。由于您希望动态计算密钥,因此将散列更改为task_name => :foo
,其中task_name
是保存符号的变量。
换句话说,您不希望将任务按字面意思命名为task_name
,而是希望将其命名为变量task_name
包含的名称。
这篇关于RAKE元编程:如何从列表创建多个任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文