Не удается передать аргументы в задачу rake - изменился ли синтаксис? - PullRequest
3 голосов
/ 25 ноября 2011

Я использую проект rails 3.1.3 с граблями (0.9.2.2). Я хочу сделать это в граблях: назовите это как

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

и затем внутри задачи rake получите доступ к "/path/to/file.txt" как args.filename

Я думал, что смогу сделать это так (пут есть для отладки):

namespace :tale do
  desc "Expects to get a file or folder name as the first argument, and passes that to Tale.import_kml"
  task(:import_kml, [:filename] => :environment) do |t, args|
    puts "args = #{args.inspect}"
    if File.exists?(args.filename)
      Tale.import_kml(filename)
    end
  end
end

Но я понял:

** 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

так, имя файла не превращается в аргументы. Я не могу понять, что я делаю здесь неправильно ...

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Попробуйте такой фрагмент:

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"}
0 голосов
/ 25 ноября 2011

WarHog помог мне разобраться: мне пришлось изменить строку «Задание» на

task :import_kml, [:filename] => [:environment] do |t, args|

и назовите это как

rake tale:import_kml[/path/to/file.txt]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...