运行一个rails 7.0.x应用程序,每当它引用app/models中的Model类时都会遇到uninitialized constant错误

所以我在纽约有一个服务班

app/services/sales_service.rb

服务级别:

class SalesService
  def gensalesdata
   print "TESTING: #{AuthorSale.last} \n"
  end
end

它由rake任务调用:

task :testtask1 do
   SalesService.new.gensalesdata
end

它正在调用一个名为AuthorSale的基本模型文件,该文件位于

app/models/author_sale.rb

模型文件编码为:

class AuthorSale < ApplicationRecord
end

即使我从服务类执行一个简单的AuthorSale.last调用,我也会收到该错误:

uninitialized constant SalesService::AuthorSale
  • 运行了bin/rails zeitwerk:check判断,结果返回Hold on, I am eager loading the application. All is good!响应
  • config/environments/development.rb文件中设置了config.eager_load = true
  • 我在So上看了几十个类似的帖子,但似乎没有一个能解决我的问题.
  • MySQL中的底层表名为author_sales
  • 更奇怪的问题是,如果我从Rails控制台调用它,同样的代码也能很好地工作.如果代码是通过Rake任务从命令行运行或从Web服务器运行,它将停止工作

最新情况:

  • 在调试过程中发现了另外两个问题,当我将其添加到config/environments/development.rb时:
  config.eager_load = true
  print "#{ActiveSupport::Dependencies.autoload_paths}"

即使将RAILS_ENV设置为development,该流也不会进入该文件

当我在服务类文件内打印出相同的ActiveSupport::Dependencies.autoload_paths时,它会打印出一个空数组,这进一步证明应用程序无法找到/加载app/models个文件中的任何一个

我错过了什么?

推荐答案

您可能需要将RAKE任务链接到某个环境:

task testtask1: :environment do
   SalesService.new.gensalesdata
end

Ruby-on-rails相关问答推荐

Rails 7通过引擎将方法自动加载到控制器中的方法

链轮轨道V4链接到外部Ruby 的 list 文件

使用ImportMaps将HighLightJS添加到rails 7.1

您如何测试方法调用块内调用的方法,以及使用 rspec 在块内传递给该方法调用的内容

如何在 Ruby 字符串中返回最后一个斜杠(/)之后的所有内容

如何获取 Ruby on Rails 生成的表单元素 id 以供 JavaScript 参考?

fields_for 表单构建器对象为零

更改 form_for rails 3.1 生成的 html 表单 ID

如何在 Rails ActiveRecord 中指定日期小于今天的条件

Rails:仅在创建时验证,或者当字段不为空时在更新时验证

测试:如何在不损失速度的情况下专注于行为而不是执行?

连接表的最佳 SQL 索引

保存后重定向到索引而不是显示

Rails 4模块的未初始化常量

Ruby 根据属性在数组中查找并返回对象

在 Rails 协会中未找到名为的协会可能拼写错误的问题

资源和资源方法之间的区别

我应该在 Heroku Cedar 上使用薄的还是独角兽

Ruby on Rails Bootstrap Glyphicons 不工作

ruby on rails 如何处理 NaN