Rake命名空间无法识别本地任​​务

时间:2015-06-13 21:03:11

标签: ruby rake rake-task

我正在学习Ruby并试图尝试解析参数并且遇到了我做的这个例子的问题。 Rake命名空间无法识别本地任​​务。 :example任务正常。 :exampleAlt任务无效。

错误是:

$ rake myapp:exampleAlt
rake aborted!
NameError: undefined local variable or method `runTests' for main:Object
C:/CTemp/rubyTest/Rakefile:19:in `block (2 levels) in <top (required)>'
Tasks: TOP => myapp:exampleAlt

这是我的代码:

require 'rake'
require 'rake/testtask'

# uses '--' args format because the 'optparse' lib we use wants it that way
# runs myapp tests with args client, env, and application
namespace :myapp do |args|

  desc "Runs all tests."
  task :runTests, [:client, :env, :app] do |t, args|    
    puts "Args: #{args}"
  end

  desc "Runs example."
  task :example do    
    Rake.application.invoke_task("myapp:runTests[--client=EXAMPLE, --env=Staging, --app=myapp]")
  end

  desc "Runs example alternate."
  task :exampleAlt do    
    Rake::Task[myapp:runTests].invoke('--client=EXAMPLE', '--env=Staging', '--app=myappalt')
  end

  desc "Runs tests with default values."
  task :defaults, :client, :env, :app do |t, args|    
    args.with_defaults(:default_client => '--client=EXAMPLE', :default_env => '--env=Staging', :default_app => '--app=myapp')
    puts "Args: #{args}"
  end

end

1 个答案:

答案 0 :(得分:1)

第20行遇到问题:

Rake::Task[myapp:runTests].invoke('--client=EXAMPLE', '--env=Staging', '--app=myappalt')

myapp:runTests没有符号,也没有字符串。如果你把它变成一个字符串,那么你的任务就会运行:

      Rake::Task['myapp:runTests'].invoke('--client=EXAMPLE', '--env=Staging', '--app=myappalt')

使用Rake::Task[...].invoke您无法在命名空间内工作,您可以在全局级别调用任务。