モンモンブログ

技術的な話など

「ActionDispatch::Static がないよ」エラーは rails_12factor gem 入れて解決

環境

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G29
% ruby --version
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]
% bundle exec rails --version
Rails 5.1.4

本題

production 環境で rails console や rails server がエラって起動しませんでした。

% RAILS_ENV=production be rails console
/Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:106:in `assert_index': No such middleware to insert before: ActionDispatch::Static (RuntimeError)
        from /Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:73:in `insert'
        from /Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/configuration.rb:69:in `block in merge_into'
        from /Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/configuration.rb:68:in `each'
        from /Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/configuration.rb:68:in `merge_into'
(略)

No such middleware to insert before: ActionDispatch::Static と怒られます。ActionDispatch::Static って actionpack に含まれるミドルウェアみたいだけどなんでだろな。

ググってみたところ、GitHub Issue に解決法を見つけました。

No such middleware to insert before: ActionDispatch::Static · Issue #221 · AssetSync/asset_sync

rfroetscher さんのコメント。

Make sure you have gem 'rails_12factor', group: :production.
That solved the problem for me.

このコメント通りに rails_12factor を Gemfile に追加するだけで解決しました。

group :production do
  gem 'heroku-deflater'
  gem 'rails_12factor' # 追加
end

全然深掘りしてないですが、動いたのでよしとします٩( 'ω' )و

蛇足

ついでにもう1つ、同 Issue の別コメントに「heroku-deflater gem を Gemfile から削除すると直る」という情報もあり、僕の場合はこれでも確かに動いたのですが、 heroku-deflater は削除したくないので前述の方法で解決しましたとさ。

(ていうか多分この heroku-deflater がそもそもの原因な気がする…)