Ruby Can';t将args传递给rake任务-语法是否已更改?

Ruby Can';t将args传递给rake任务-语法是否已更改?,ruby,rake,Ruby,Rake,我正在使用一个rails 3.1.3项目,它有rake(0.9.2.2)。我想在rake任务中这样做:像 rake tale:import_kml /path/to/file.txt rake tale:import_kml[/path/to/file.txt] 然后在rake任务中,以args.filename的形式访问“/path/to/file.txt” 我想我可以这样做(puts用于调试): 但是,我明白了: ** Invoke tale:import_kml (first_time

我正在使用一个rails 3.1.3项目,它有rake(0.9.2.2)。我想在rake任务中这样做:像

rake tale:import_kml /path/to/file.txt
rake tale:import_kml[/path/to/file.txt]
然后在rake任务中,以args.filename的形式访问“/path/to/file.txt”

我想我可以这样做(puts用于调试):

但是,我明白了:

** Invoke tale:import_kml (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute tale:import_kml
args = {}
rake aborted!
can't convert nil into String
所以,filename并没有将其转换为args。我不知道我做错了什么…

试试这样的片段:

namespace :tale do
  desc "Expects to get a file or folder ..."
  task(:import_kml, [:filename]) do |t, args|
    args.with_default(:filename => :environment)
    puts "args = #{args.inspect}"
  end
end

rake tale:import_kml[foo]  # => args = {:filename => "foo"}

WarHog帮我解决了这个问题:我不得不将“任务”行改为

task :import_kml, [:filename] => [:environment] do |t, args|
就这样说吧

rake tale:import_kml /path/to/file.txt
rake tale:import_kml[/path/to/file.txt]

真管用!谢谢:)还是不知道为什么我的尝试没有成功。顺便说一句,在您的代码片段中,您调用了
tale:import\u kml[foo]
,而不是
tale:import\u kml[foo]
,只是提到了这一点,以防其他人对此感到困惑:)实际上,WarHog没有修复它,因为我无法访问rake任务中的rails环境,因此无法调用
tale.import\u kml(filename)
(Tale是我的AR模型之一)