如何编写依赖于具有命名空间和参数的任务的 Rake 任务

How can I write a Rake task which depends on task with namespace and parameter

我有安装和启动 neo4j 的 rake 任务。

rake neo4j:install[community-latest, stable]
rake neo4j:start[stable] where `stable` is environment.

现在我想写另一个类似 rake setup 的 rake 任务并创建对 rake neo4j:start[stable]rake neo4j:install[community-latest, stable]

的依赖

我试过了,

task :setup_dev_env => [:neo4j:install[community-latest, stable], :neo4j:start[stable]] do
    puts "Created Rake task"
end

显然这是行不通的,因为在上面的任务中 neo4j 是命名空间。然后我将任务更改为

task :setup_dev_env => [:'neo4j:install[community-latest, stable]', :'neo4j:start[stable]'] do
    puts "Hello rake task working"
end

所以,至少这解决了我的 neo4j 命名空间问题,但仍然无法解决问题。

当我 运行 rake setup_dev_env 它说

rake aborted!
Don't know how to build task 'neo4j:install[community-latest, stable]' (see --tasks)

您可以按照以下方式编写您的任务:

    desc 'Some description'
    # setup_dev_env is dependent on neo4j:start
    task :setup_dev_env,[:stable] => "neo4j:start" do
      puts "Created Rake task"
    end

以上代码行接受一个参数stable并将其传递给neo4j:start。要在 neo4j:start 中使用稳定参数,您必须像这样接收:

    desc 'Some description'
    # it will be inside namespace neo4j
    task :start, [:stable] do |t, args|
      puts "Created Rake task #{args.inspect}"
    end

您可以将该任务修改为:

desc 'Some description'
# setup_dev_env is dependent on neo4j:start
task :setup_dev_env,[:stable] => :environment do |t, arg|
param = arg[:stable].nil? ? 'stable' : arg[:stable]
Rake::Task['neo4j:start'].invoke(param)
  puts "Created Rake task"
end