Как войти в рабочий скрипт 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')