AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

assets:precompile で No such middleware to insert before: ActionDispatch::Static

GithubActions でビルド回してたんだけど、 PR 積んだブランチをビルドしたら遭遇した。

結論から書くと、 RAILS_SERVE_STATIC_FILES=true を precompile 時に追加すれば回避できる。

RackBasicAuth の追加

リリース直前になって「フライング利用するユーザを抑制したい」と言われてしまい。

BFF 設計なので「雑にバックエンドに Basic 認証入れるか〜」という回避方法を採用し、用意されていた RackBasicAuth に production を有効にする設定を入れた。

ところ、 GithubActions でのビルドが assets:precompile 落ちるようになった。

ActionDispatch::Static

落ちた時のコマンドはこうだった (Rails 6.1 環境です)。

RUN RAILS_ENV=production DATABASE_ADAPTER=nulldb SECRET_KEY_BASE=dummy bundle exec rails assets:precompile

で、なんでか考えてたんだけど、 RackBasicAuth (/config/initializers/basic_auth.rb) にこういうヤツが書かれている。

  Rails.application.configure do
    config.middleware.insert_before ActionDispatch::Static, RackBasicAuth
  end

こいつじゃねえか? ということでググってみる。

github.com

おーっ、そのものズバリじゃん、という事で assets*precompile を以下のように変更。

RUN RAILS_SERVE_STATIC_FILES=true RAILS_ENV=production DATABASE_ADAPTER=nulldb SECRET_KEY_BASE=dummy bundle exec rails assets:precompile

これで無事ビルドも通るようになった、めでたしめでたし。

自分の責務に関わるトコしか Rails のコアになるトコの実装読んだこと無いので、頑張って一通り読んだほうがよさそうだなあ、と今やられている案件に関わってから思っている。

責務の範囲外でも、ある時突然「案件内でけっこう技術が出来る人」になってしまうリスクがあるのだなあ、という学びがあった。 日々学べ……!