LoadError:无法在Rails中自动加载常量

时间:2019-03-28 12:19:11

标签: ruby-on-rails

我正在运行一个Rails应用程序。

app / workers / sample / fetch_book_report_worker.rb

class Sample::FetchBookReportWorker
 // body
end

app / workers / sample / fetch_student_report_worker.rb

class Sample::FetchStudentReportWorker
 // body
end

app / workers / sample / fetch_teacher_report_worker.rb

class Sample::FetchTeacherReportWorker
 // body
end

app / workers / sample / fetch_college_report_worker.rb

class Sample::FetchCollegeReportWorker
 // body
end

当我单独运行上述工作人员时,没有发现问题。但是我同时经营所有工人。我收到以下错误。

LoadError: Unable to autoload constant Sample::FetchStudentReportWorker, expected /home/ubuntu/my-app/app/workers/sample/fetch_student_report_worker.rb to define it

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

我认为这可能是文件名拼写错误。确保您的文件完全是'fetch_student_report_worker.rb',并且文件路径正确。

答案 1 :(得分:1)

您可以看到autoload_paths来键入此命令。

bin/rails r 'puts ActiveSupport::Dependencies.autoload_paths'

如果看不到... / app / workers / sample,请在autoload_paths中添加config/application.rb

config.autoload_paths << Rails.root.join("app/workers/sample")

如果在生产模式下可能引起问题,请使用“ eager_load_paths”

来自https://guides.rubyonrails.org/autoloading_and_reloading_constants.html的推荐人

答案 2 :(得分:0)

LoadError error的一个可能的根本原因是,从Rails 5.2.0开始,对自动加载进行了更改,这些更改要求(至少)需要定义子模块(命名空间)(作为常量)。

在原始帖子的示例中,module Sample应该在app/workers/sample.rb文件中定义(如以上Vasfed所述)。

有关更多详细信息,请参阅此related SO answer