在 rake 任务中使用 rails logger,rails 5

Posted

技术标签:

【中文标题】在 rake 任务中使用 rails logger,rails 5【英文标题】:Using rails logger in rake tasks, rails 5 【发布时间】:2016-12-19 16:56:06 【问题描述】:

我正在使用 rails 5 构建一个 ruby​​ on rails 应用程序,并且我有许多想要记录信息的 rake 任务。但是,当我尝试访问记录器时,出现错误:未定义的局部变量或方法`记录器'

我在 lib/tasks 中有我的 rake 任务,并且我已经在 production.rb 和 development.rb 中声明了一个记录器

这是一个示例任务:

namespace :some_namespace do
    desc "a description"
    task :scrape_info do
        include Scraper
        startTime = Time.now
        Rails.logger.tagged("Scraper")  Rails.logger.info "Beginning scrape: #startTime " 
        Scraper.scrape_info
        endTime = Time.now
        Rails.logger.tagged("Scraper")  Rails.logger.info "Finished scrape: #endTime " 
    end
end

摘自 development.rb 我定义了记录器的地方:

 config.logger = Logger.new(STDOUT)
 config.log_level = :info
 config.logger = ActiveSupport::TaggedLogging.new(logger)

知道如何将记录器合并到 rake 任务中吗?我知道我可以简单地使用 puts 语句打印到标准输出,但最终我希望拥有每日日志文件,并且我希望将我的 rake 任务包含在这些文件中

回答: 只需添加@Joel_Blum 答案中给出的环境标签。此外,在 development.rb 中,行

config.logger = ActiveSupport::TaggedLogging.new(logger)

需要:

config.logger = ActiveSupport::TaggedLogging.new(config.logger)

【问题讨论】:

What's the 'environment' task in Rake?的可能重复 我看到并认为我的问题有所不同,因为我最初添加了环境。然而,实际的问题是 development.rb 中的一个简单的错字 还是谢谢你! 【参考方案1】:

尝试添加环境,这将具有加载您的 Rails 应用程序的效果。

 task :scrape_info => :environment do
  ...
 end

【讨论】:

谢谢!这有帮助 - 我添加了环境部分,但我仍然遇到同样的错误 - 我发现了我的错误的真正来源,这是 development.rb 中的一个错字

以上是关于在 rake 任务中使用 rails logger,rails 5的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 中使用环境将参数传递给 Rake 任务? [复制]

如何在 kubernetes cron 作业中启动 rails rake 任务

如何在 ruby​​ on rails 的亚马逊 aws 服务器中使用 gem 执行 rake 任务?

rake 任务中的 Rails 异常通知器

在 Elastic Beanstalk 环境中运行 Rails rake 任务

如何编写 Rake 任务以将数据导入 Rails 应用程序?