如何编写一个Rake任务,该任务依赖于命名空间和参数的任务

时间:2017-03-06 08:26:16

标签: ruby-on-rails neo4j rake-task

我有rake任务安装并启动neo4j。

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)

2 个答案:

答案 0 :(得分:0)

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

    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

答案 1 :(得分:0)

您可以将该任务修改为:

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