Rails: Как записать в пользовательский файл журнала из грабли задачи в рабочем режиме? - PullRequest
6 голосов
/ 18 мая 2010

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

Я читаю здесь

Как использовать пользовательскийвойти в мои задачи по рейку в Ruby on Rails?

, что это нормальное поведение, и также нашел билет #wontfix в маяке.

Мой вопрос: есть ли способ выводачто происходит, пока выполняется мое задание по рейку?Он выполняет некоторое ползание и работает часами.Я бы предпочел, чтобы вывод шел в определенном файле журнала, например /log/crawler.log

Сейчас я просто использую эту команду для записи в файлы журнала:

ActiveRecord::Base.logger.info "Log Text"

Спасибо!

Ответы [ 3 ]

14 голосов
/ 18 мая 2010

Проблема, с которой вы столкнулись, заключается в том, что rails игнорирует журналы уровня информации в производственном режиме.

Я бы рекомендовал прочитать это: http://www.ruby -doc.org / stdlib / libdoc / logger / rdoc / classes / Logger.html

и создание собственного логгера:

logger = Logger.new('logfile.log')
logger.info "Something happened"
2 голосов
/ 06 июля 2011

Может быть, вам нужно выписать буфер там, где он вам нужен:

logger.flush

или вы можете включить автоматическую промывку:

task :foo => :environment do
  Rails.logger.auto_flushing = 1
  Rails.logger.info "bar"
end
2 голосов
/ 18 мая 2010

Вы можете создать новый регистратор с помощью Logger.new ("file.log") и затем вызывать его методы следующим образом.

  task :import_stuff => :environment do
    require 'csv'
    l = Logger.new("stuff.log")
    csv_file = "#{RAILS_ROOT}/stuff.csv"
    CSV.open(csv_file, 'r') do |row|
      l.info row[1]
     end
  end
...