首页 > 解决方案 > 元编程 rake 任务时,.rake 文件中的模型不可用

问题描述

我正在尝试根据数据库记录生成一组 rake 任务,但我的模型不可用

rake aborted!
NameError: uninitialized constant Report

当然,我不会尝试在 rake 任务中使用它,因为我需要在命名任务之前已经拥有它。是否有任何理由在该范围内默认不可用?

要求app/models/report只是导致

rake aborted!
NameError: uninitialized constant ApplicationRecord

如果我需要app/models/reportand app/model/application_record,我会得到

rake aborted!
ActiveRecord::ConnectionNotEstablished: No connection pool with 'primary' found.

这使得我看起来像是要解开通常自动为我们处理的自动加载的长链。

(我在一个带有 的 Rails 6.0 应用程序中config.load_defaults 5.2,所以它仍然使用经典自动加载,如果这很重要的话。)

解决这个问题的最直接的方法是什么,以便我拥有我需要的东西?

(我意识到这些东西可能是故意被排除在这个范围之外以使它们变得rake -T更快,并且使它们可用会产生成本,但我想尝试一下,看看性能如何,并决定它是否值得做或不做。)

更新:

到目前为止,追查所有错误,我的report.rake文件以

require_relative "../../app/models/application_record"
require_relative "../../app/models/report"

require "active_record"
ActiveRecord::Base.establish_connection(YAML.load_file("#{Rails.root}/config/database.yml")[Rails.env])

task_list = Report.pluck(:task)

我被困在

rake aborted!
ActiveRecord::ConnectionTimeoutError: could not obtain a connection from the pool within 5.000 seconds (waited 5.004 seconds); all pooled connections were in use

标签: ruby-on-railsactiverecordmetaprogrammingrake

解决方案


推荐阅读