Как запускать рейк-задачи с консоли?


85

Я хочу вызвать свою задачу rake с консоли. Это выполнимо? если да, то как это сделать?

Я пробовал это на консоли:

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

но это дает мне эту ошибку:

RuntimeError: Don't know how to build task

как будто грабли не нашли задачу.

любая помощь будет оценена.

Спасибо

Изменить: я использую рельсы 2.3.5

Ответы:


189

Выполнение ваших задач Rake требует двух шагов:

  1. Загрузка граблей
  2. Загрузка ваших задач Rake

Вам не хватает второго шага.

Обычно это делается в Rakefile, но вы должны сделать это вручную здесь:

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

2
Дополнительные параметры см. На stackoverflow.com/questions/577944/…
Джахан

8
Возможно, вы захотите отметить разницу между высказыванием .invokeи .execute, если вам нужно запустить задачу несколько раз (например, средство проверки работоспособности данных с приложением, запуск которого занимает слишком много времени), тогда вы захотите выполнить .executeзадачу.
mu слишком короткое

4
Если вам нужно передать аргументы, сделайте это в методе invoke:.invoke(arg1, arg2,...)
Нуно Силва

14

Самый простой способ сделать это - запустить% x [ command ] из irb. Я не уверен, чего вы хотите достичь.

%x[rake db:migrate]

РЕДАКТИРОВАТЬ: Я настоятельно рекомендую использовать, .invokeкак сказал Даниэль в принятом ответе.


1
проблема в том, что грабли, кажется, не распознают мою задачу. есть идеи почему?
Fajarmf

отлично работает @garno! извините, я знаю, что прошел год, и внезапно я столкнулся с той же потребностью.
Fajarmf

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.