Могу ли я определить, была ли запущена задача рейка в командной строке (в отличие от cron и т. Д.)?

#ruby-on-rails #ruby #rake

Вопрос:

Конечно, это необычно для задач рейка, которые запускаются контроллером (и своего рода клуджи), но очень часто они запускаются cron. Я хотел бы определить из задачи rake, была ли она запущена вручную в командной строке или нет.

Как я могу это сделать? Это довольно стандартная вещь, которую можно сделать в сценарии оболочки, но я не могу найти никакой документации о том, как это сделать с помощью задачи rake.

Ответ №1:

Попробуйте это:

 if defined?(Rails::Console) 
  ....
end 
 

Или вы можете проверить, что caller[0] возвращается при вызове из cmd, и использовать это в if вместо этого.

Комментарии:

1. Я не думаю, что вы понимаете, о чем я спрашиваю. Примечание «из задачи рейка». Я говорю о своем собственном задании на грабли, которое я пишу. Он должен определить, как он был запущен. Просмотр журналов позже был бы совершенно бесполезен для моих целей. Это не «из-за задачи грабель».

2. Нет… второй ответ охватывает это. В основном я говорю о том, что да, нет встроенного кода, который автоматически делал бы это за вас, поэтому вам придется делать это вручную в самой задаче, как вы предлагаете. Я предполагаю, что ответ, который вы искали, заключается в том, как правильно зарегистрировать его в первую очередь. Ответ на этот вопрос заключается в использовании ядра#вызывающего абонента. Так, например Rails.logger(caller[0]) , это вернет вызывающий метод.

3. мой вопрос не имеет никакого отношения к ведению журнала. Я хочу обнаружить его в задаче rake (чтобы он мог взаимодействовать с пользователем, если он там есть, и просто продолжить, если нет).

4. Обновил ответ.