【问题标题】:Rakefile task block arg not workingRakefile 任务块 arg 不工作
【发布时间】:2015-04-10 00:59:46
【问题描述】:

我的 Rakefile 中有一个任务

desc "Create a new person."
task :add_person, :name do |t, args|
    sh "echo My name is #{args.name}"
end

当我做$ rake add_person john

我明白了:

echo My name is 
My name is
rake aborted!
Don't know how to......

但我应该得到:

echo My name is john
My name is john
rake aborted!
Don't know how to......

发生了什么事?

【问题讨论】:

    标签: ruby rake rake-task rakefile


    【解决方案1】:

    这样称呼它:

    rake add_person[john]
    

    或者如果您使用的是 zsh:

    rake add_person\[john\]
    

    编辑: 回复关于能够调用它的评论:rake add_person john

    我认为您有两个选择。

    使用环境变量方法传递args:

    desc "Create a new person."
    task :add_person do |t, args|
      name = ENV.fetch('NAME')
        sh "echo My name is #{name}"
    end
    

    然后这样调用:

    $ rake add_person NAME=john
    

    或者,使用 ARGV 破解(个人不推荐):

    desc "Create a new person."
    task :add_person do
      name = ARGV.last
      sh "echo My name is #{name}"
      # Task does nothing
      task name.to_sym do ; end
    end
    

    然后像这样使用:

    $rake add_person john
    

    我个人只是按预期使用它。

    【讨论】:

    • 这行得通。有没有办法像rake add_person john 这样称呼它?这样看起来更优雅。
    • 在我的回答中添加了一个如何做到这一点的示例,但我个人会按预期使用它。
    • 谢谢。我只是想知道。将按预期使用。
    【解决方案2】:

    更新任务

    task :add_person, [:name] => :environment do |_t, args|
      puts "My name is #{args[:name]}"
    end
    

    然后运行

    rake add_person['john']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 2015-04-16
      • 1970-01-01
      相关资源
      最近更新 更多