Рейк Выполнить с несколькими аргументами - PullRequest
2 голосов
/ 07 ноября 2011

Я вызываю рейк-задачу внутри задачи и сталкиваюсь с препятствиями при вызове: execute

response = Rake::Task["stuff:sample"].execute[:match => "HELLO"]

или

response = Rake::Task["stuff:sample"].execute[:match => "HELLO",:freq=>'100']

Вызов задачи

task :sample, [:match,:freq] => :environment  do |t, args|

Я получаю сообщение об ошибке: «невозможно преобразовать хэш в целое число»

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 30 октября 2013

Квадратные скобки в вашем синтаксисе выполнения сбивают меня с толку.Это специальный синтаксис граблей (который вы используете неправильно) или вы хотите отправить массив с одним элементом (хеш)?Разве это не так же, как это?

response = Rake::Task["sample"].execute([:match => "HELLO",:freq=>'100'])

Помимо этого, Task#execute ожидает Rake: TaskArguments.

class TaskArguments
    ...

    # Create a TaskArgument object with a list of named arguments
    # (given by :names) and a set of associated values (given by
    # :values).  :parent is the parent argument object.
    def initialize(names, values, parent=nil)

Вы можете использовать:

stuff_args = {:match => "HELLO", :freq => '100' }
Rake::Task["stuff:sample"].execute(Rake::TaskArguments.new(stuff_args.keys, stuff_args.values))

Вы также можете использовать Task # invoke, который будет получать основные аргументы.Убедитесь, что вы Task#reenable, если вы вызываете его несколько раз.

3 голосов
/ 03 января 2012

Я думаю, что проблема в коде, который вы не публикуете.У меня отлично работает:

james@James-Moores-iMac:/tmp$ head r.rb call.rb 
==> r.rb <==
task :sample, [:match,:freq] do |t, args|
  puts "hello world"
  puts args[:match]
end

==> call.rb <==
require 'rubygems'
require 'rake'
load 'r.rb'
Rake::Task["sample"].execute :match => "HELLO"
james@James-Moores-iMac:/tmp$ ruby call.rb 
hello world
HELLO
james@James-Moores-iMac:/tmp$ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...