Railsでマルチスレッドを使用してActveRecordのクエリを並列に実行しようとしたら『RuntimeError: Circular dependency detected while autoloading constant …』というようなエラーがでました。
エラーの詳細は
RuntimeError (Circular dependency detected while autoloading constant DayRange):
app/models/stock.rb:27:in `get_year_data'
app/controllers/api_controller.rb:122:in `block in graph_data'
のようになっていました。
Railsでは一度読み込んだファイルをキャッシュして2回目は読み込まないようにしているようなのですが、マルチスレッドを使用すると読み込んでいないファイルを同時に読み込みに行った場合に、片方のスレッドが読み込んだあともう片方のスレッドがもう読み込み済みとなって読み込まずエラーになるようです。
# config/application.rb
module DataAnalysis
class Application < Rails::Application
config.eager_load_paths += %W(#{config.root}/app/models/stock.rb)
end
end