Help us understand the problem. What is going on with this article?

Rakeタスクで並行処理をするとCircular dependency detected while autoloading constant エラーが出て困った話

More than 1 year has passed since last update.

背景

  • Rails4.2, ruby2.3系
  • 集計のためにRakeタスクで並行処理を行う必要があった
  • Parallelを採用し、並行処理を実装した
  • Circular dependency detected while autoloading constant エラーが発生し困った
  • 調べるとeager_load_paths設定しようって書いてあって、やったけど解決しなかった

エラーの原因

1. Autoloadingはスレッドセーフじゃない

2. rakeタスクはデフォルトでeager_loadがfalseになり、Autoloadしちゃう

  • config/application.rbに以下の表記をふと発見
    • eager_load設定いくらしてもうごかなかったのはこれが理由
config/application.rb
# Rake tasks automatically ignore this option for performance.

対策

  • taskの始まりにRails.application.eager_load!を追加する
    • taskの外に追加するとうまくいかないので注意
task 'resque:setup' => :environment do |task|
  Rails.application.eager_load!
  # ここに並行処理
end

その他参考になったやつ

munaita_
フリーランスのデータエンジニアです。 データ基盤構築や、ビッグデータを扱うシステム構築が得意です。 新卒サイバーエージェントからフリーランス。 広告/小売/教育など幅広いドメインのデータビジネスを経験しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした