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

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

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

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

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

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

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

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


person ylluminate    schedule 05.08.2012    source источник


Ответы (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')
person Trip    schedule 05.08.2012