我正在运行一个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
如何解决这个问题?
答案 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。