1. ホーム
  2. ruby-on-rails

[解決済み] ルートが一致しない [GET] /assets

2022-05-10 03:36:28

質問

私は本番環境でテストしようとしているRailsアプリを持っています。私は RAILS_ENV=production rake assets:precompile を実行し、すべてのアセットを /public/assets に生成しました。問題は、アプリを起動するときに、/public/assets にある RAILS_ENV=production rails s thin と表示されることです。

ActionController::RoutingError (No route matches [GET] "/assets/application-eff78fd67423795a7be3aa21512f0bd2.css"):

このファイルは /public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css .

なぜこのようなことが起こるのか、何か考えがあれば教えてください。 RoutingError ?

どのように解決するのですか?

本番モードでは、Railsは静的アセットを提供する責任を持ちません。したがって、このエラーが発生します。ThinもRailsのラッパーに過ぎないので、それを行うことはありません。

のこの設定によって制御されます。 config/environments/production.rb で設定します。

config.serve_static_files = false

あるいは、Rails 5では

# config/environments/production.rb
config.public_file_server.enabled = true

または ENV['RAILS_SERVE_STATIC_FILES'] を true に設定する。

に設定するか、その true にするか、静的アセットを提供するApacheやNginxのような本物のサーバを使用します。Powでもいいんじゃないかと思います。


Herokuであれば、以下のような使い方が推奨されています。 rails_12factor gemを使用することを推奨します。このgemはデフォルトでこの設定を有効にします。このgemを production グループに配置します。 Gemfile を、このようにします。

group :production do
  gem 'rails_12factor'
end