Rails: задача rake с аргументами не работает

Вот моя задача на грабли

namespace :users do
  task :change_role, [:role] => :environment do |t, args|
    puts args.role
  end
end

Я вызываю это так:

rake users:change_role["role"] но я получаю эту ошибку no matches found: users:change_role["role"]


person dennismonsewicz    schedule 03.07.2014    source источник
comment
Куда ты это кладешь? Нет ничего плохого в том, что вы написали, или в том, как вы на это ссылаетесь.   -  person meagar    schedule 03.07.2014
comment
имеет ли ваш файл задачи rake расширение .rake?   -  person nickcen    schedule 03.07.2014
comment
@nickcen - мой файл называется users.rake   -  person dennismonsewicz    schedule 03.07.2014
comment
@meagar - это в app/lib/tasks   -  person dennismonsewicz    schedule 03.07.2014


Ответы (4)


Вам нужно избегать квадратных скобок при их использовании в некоторых оболочках, таких как zsh:

rake users:change_role\["role"\]
person infused    schedule 03.07.2014
comment
Нет. Это ошибка вашей оболочки, говорящая вам, что для этой команды не найдено совпадений. С zsh и без экранирования вывод будет zsh: no matches found: users:change_role[ok]. Использование zsh с экранированием вывода ok - person infused; 03.07.2014
comment
Вы правы, его грабли говорят, что не могут найти команду. В любом случае вам нужно экранировать скобки с помощью zsh. - person infused; 03.07.2014
comment
А, вообще-то я думаю, что ты прав. Совпадений не найдено: определенно не выводится rake; грабли сказали бы, что не знаю, как построить задачу.... - person meagar; 03.07.2014
comment
Это экранирование неверно... Я попробовал это rake users:change_roles[\"hello\"] и все еще получаю ту же ошибку. - person dennismonsewicz; 07.07.2014
comment
Вы имели в виду rake users:change_role[\"hello\"]? - person infused; 07.07.2014
comment
Отличный звонок! полная ошибка действительно: zsh: no matches found: - person DaveWoodall.com; 15.06.2020

Поместите задачу rake в одинарные кавычки.

rake 'users:change_role["role"]'

подробнее на https://thoughtbot.com/blog/how-to-use-arguments-in-a-rake-task

person Koko Lingga    schedule 16.11.2019
comment
Единственное, что работает для меня (Rails 5.0.7.2)!! - person Matheus Porto; 10.02.2020
comment
Это предварительное требование zsh. - person Trip; 24.02.2021

Вы можете добавить unsetopt nomatch в свой файл .zshrc, как описывает Чад Пайтел в здесь

person Nadav    schedule 29.11.2018
comment
Ты мужчина, собака. Это правильный ответ для большинства людей, особенно для тех, кто приходит из bash. - person Joshua Pinter; 21.01.2021

Метод @infused работает, но если вы хотите, чтобы изменения были постоянными, вы можете просто вызвать rake users:change_roles["hello"], добавьте следующее в свой .zshrc:

alias rake='noglob rake'
person sobstel    schedule 22.03.2015