#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. Обновил ответ.