Как войти в рабочий скрипт Ruby приложения Rails, в котором нет среды?

Я использую rufus-планировщик для обработки заданий cron для приложения Rails 3.2.x. Корень worker.rb запускается мастером (на самом деле выскочка на этом конкретном сервере), и поэтому при запуске он не имеет контекста Rails для работы. Очевидно, когда я пытаюсь позвонить logger или же Rails.logger это будет терпеть неудачу каждый раз.

я использую log4r в качестве замены для Rails Logger по умолчанию, что довольно неплохо, но мне интересно, каким будет правильное решение этой проблемы:

1) Нужно ли давать скрипту контекст Rails при запуске (он просто запущен rake задач сейчас, так что в итоге получается среда Rails, когда рабочий скрипт передает задачу rake, и я боюсь, что предоставление сценария env Rails перед запуском временной задачи будет излишним, так как для запуска env требуется так много времени? или же

2) Должен ли я просто настроить log4r как можно было бы сделать в не-Rails-скрипте Ruby, который просто читает в той же конфигурации log4r.yml, которую использует приложение Rails, и, следовательно, участвует в той же структуре журнала?

3) Или какой-то другой вариант, о котором я не думаю?

Кроме того, я был бы признателен за пример или за шаги, которые я должен рассмотреть с рекомендуемой реализацией.

Для справки я следовал " Как настроить Log4r с Rails 3.0.x?", И я думаю, что это может быть полезно при интеграции с вышеприведенным: " Правильно использовать Log4r в Ruby Application?"

1 ответ

Я думаю, что это может быть то, что вы ищете..

Используйте это в самом работнике, и создайте пользовательский именованный файл журнала

require 'log4r'

logger = Log4r::Logger.new('test')
logger.outputters << Log4r::Outputter.stdout
logger.outputters << Log4r::FileOutputter.new('logtest', :filename =>  'logtest.log')
logger.info('started script')

## You're actual worker methods go here

logger.info('finishing')
Другие вопросы по тегам