Як запустити рейкові завдання з консолі?


84

Я хочу викликати своє завдання з консолі. Це можливо? якщо так, то як це зробити?

Я спробував це на консолі:

require 'rake'
Rake::Task['my_task'].invoke

але це видає мені цю помилку:

RuntimeError: Don't know how to build task

це як граблі не можуть знайти завдання.

будь-яка допомога буде вдячна.

Дякую

Редагувати: я використовую рейки 2.3.5

Відповіді:


188

Запуск ваших завдань Rake вимагає двох кроків:

  1. Завантаження граблів
  2. Завантаження ваших завдань Rake

Вам не вистачає другого кроку.

Зазвичай це робиться у Rakefile, але тут потрібно робити це вручну:

require 'rake'
Rails.application.load_tasks # <-- MISSING LINE
Rake::Task['my_task'].invoke

2
Для отримання додаткових можливостей зверніться до stackoverflow.com/questions/577944/…
— Джахан

7
Можливо, ви захочете помітити різницю між вимовою .invokeта .execute, якщо вам потрібно запустити завдання кілька разів (наприклад, перевірку обґрунтованості даних із додатком, який запускається занадто довго), тоді ви захочете виконати .executeзавдання.
— му занадто коротке ,

3
Якщо вам потрібно передати аргументи, зробіть це методом виклику:.invoke(arg1, arg2,...)
— Нуно Сільва

14

Найпростіший спосіб це запустити% x [ команда ] з irb. Я не впевнений, що саме ви хочете досягти.

%x[rake db:migrate]

EDIT: Я настійно рекомендую використовувати, .invokeяк говорить Даніель у прийнятій відповіді.


1
проблема в тому, що Рейк, схоже, не визнає мого завдання. будь-яка ідея чому?
— Фаджармф

це чудово працює @garno! вибачте, я знаю, що минув рік, і раптом я стикаюся з тією ж потребою.
— Фаджармф

2
Ви також можете оточити його тильними кліщами, якщо хочете.
— Сем Соффс,

Це повільно, тому що він повинен запустити новий процес і знову створити інстанцію вашого додатка Rails. invokeкраще та ефективніше.
— Джошуа Пінтер

9

Найпростіший спосіб:

Rails.application.load_tasks
Rake::Task['my_task'].invoke

Це не тільки простий спосіб, але також означає, що ви не закручуєте новий процес і не створюєте інстанцій свою програму Rails знову. Легко та швидко!
— Джошуа Пінтер

2

Я використовую rails 5.x.x, і мені потрібно було зробити ту ж форму rails console.
У мене тут є завдання граблі-

app/lib/task_to_execute.rake

Ось команда, яка спрацювала для мене-

Навантаження Rails.application.load_tasks

Rake::Task['task_to_execute:task_name'].invoke

Працював у мене!


1

Тільки зауважимо, що якщо ви знаходитесь у консолі rails через, rails cви можете просто викликати / запускати метод завдання rake за допомогоюirb(main):001:0> TaskClassName.new.my_task

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.