Что такое новый формат рейк-тасов? (задача :t, arg, :needs =› [deps] по сравнению с задачей :t, [args] =› [deps])

Я использую бета-версию Rails 3.1 с Ruby 1.9.2 и rake 0.9.2, и у меня есть куча задач rake, которые я написал. Вот пример:

namespace :data do
  desc "dump the nodes and edges for a graph"
  task :dump_graph, :species_id, :needs => :environment do |t,args|
    args.with_defaults(:species_id => 'Hs')
    # ...
  end
end

Однако, когда мое приложение rails загружает эти rake-задачи, теперь я получаю следующее предупреждение, повторяющееся один раз для каждой rake-задачи:

    at /home/user/railsapp/lib/tasks/data/dump_graph.rake:3:in `block in <top (required)>'
WARNING: 'task :t, arg, :needs => [deps]' is deprecated.  Please use 'task :t, [args] => [deps]' instead.

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

Ожидает ли rake, что я дам отдельные зависимости? Как мне определить их в задаче rake, если dep — это среда rails?

Ссылка на обновленную документацию будет приемлемым ответом! Я гуглил и гуглил, но безуспешно.

(И да, я понимаю, что формат указан в сообщении об ошибке. Но этот формат не кажется правильным, исходя из вариантов, которые я пробовал.)


person Juno Woods    schedule 07.06.2011    source источник
comment
У меня тоже такая проблема, но решение не работает. У меня даже есть rake task без аргументов и тоже не работает. Мой синтаксис выглядит следующим образом: «задача: имя_задачи =>: среда делать ... конец»   -  person n8gard    schedule 20.03.2012


Ответы (2)


Я знаю, что иногда это трудно расшифровать, но сообщение об ошибке дает вам новый формат:

task :t, [args] => [deps]

Итак, для вашего примера:

task :dump_graph, :species_id => :environment

http://www.postal-code.com/binarycode/2011/06/02/rake-needs-deprecated/

person Matthew Boehlig    schedule 07.06.2011
comment
Как ни странно, когда я экспериментировал с этим, я не мог заставить его работать, но теперь он работает. Я заставил его работать, выполнив: task :dump_graph, [:species_id] => [:environment]. Судя по всему, список справа необязателен, если у вас есть только один отдел. - person Juno Woods; 19.07.2011

Использование, которое работает для меня:

task :task_name, [:argument] => :environment

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

Я понятия не имею, почему для одного аргумента требуется обозначение массива - запуск задачи rake с --trace дает ошибку о том, что символ :argument не отвечает на пустое значение? метод.

person msharp    schedule 18.07.2011