У меня есть две рейк-задачи, которые я хотел бы выполнять по ночам. Я хотел бы, чтобы они записали в один файл. Я думал, что это сработает (получил здесь: Rake: регистрация любой задачи, выполняющей ):
application.rb
module Rake
class Task
alias_method :origin_invoke, :invoke if method_defined?(:invoke)
def invoke(*args)
@logger = Logger.new('rake_tasks_log.log')
@logger.info "#{Time.now} -- #{name} -- #{args.inspect}"
origin_invoke(args)
end
end
end
, а затем в rakefile
:
task :hello do
@logger.warn "Starting Hello task"
puts "Hello World!"
puts "checking connection "
checkConnection
puts "done checking"
@logger.debug "End hello rake task"
end
Но когда я запускаю задачу, я получаю:
private method 'warn' called for nil:NilClass
Я попробовал несколько вариантов этого призыва к ведению журнала (@, @@, no @) безрезультатно. Прочитайте несколько веток здесь об этом.
На сайте rubyonrails.org не упоминается вход в rake-задачи. Задачи, которые я вызываю, довольно сложные (около 20-40 минут), поэтому я действительно хочу знать, что пошло не так, если они потерпят неудачу. Из-за СУХОГО я бы предпочел создать объект logger
только один раз.