本文介绍了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元编程:如何从列表创建多个任务
发布评论