🐛

Railsでuninitialized constant ActiveStorage::Blob::Analyzableが発生する

書いた日
2022/1/4
タグ
技術
RailsでActiveStorageに関連する機能を使用しようとすると uninitialized constant ActiveStorage::Blob::Analyzable が発生します。
自分の環境は以下の通りです。
  • Rails 7.1.0.alpha
  • ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin20]
 
すでに同じIssueがいくつか報告されているので自分でIssueの起票はしていません。
 
zeitwerkをdisabledにすると解消するようなのでzeitwerkとの食い合わせの問題なように思えますが根本的に何が原因なのかの特定が難しそうなように見えます。
↑のIssueでも報告者は多数いますが未だに解決していないようです。

Workaround

↑のIssueにも記載がありますが回避策がいくつかあるので紹介します。
  • config.autoloader = :classic を設定する
    • 古い機能を使うようにするのはあまりやりたくありません
  • config.eager_load = true を設定する
    • development環境でeager_loadを有効にするのはつらいのでやりたくありません
  • initializerであらかじめ ActiveStorage::Blog を呼び出しておく
    • https://github.com/rails/rails/issues/38681#issuecomment-964356367 でコメントいただいている方法です
    • 今回の問題はActiveStorageの機能を使う際にRailsのautoloadでうまく ActiveStorage::Blog::Analyzable が読み込めないのが問題なので、initializerであらかじめロードしておけばエラーは発生しないという理解です