web-dev-qa-db-ja.com

Railsは、本番環境のパブリックディレクトリにあるアセットをロードしません

こんにちは私は公開ディレクトリにアセットを持っています(単純化のため)

レイアウトでロード

<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">
<link href="/assets/css/jumbotron.css" rel="stylesheet">
<link href="/assets/css/application.css" rel="stylesheet">

開発ではうまく機能しますが、プロダクションでは読み込まれません。

Development.rb

Web::Application.configure do
  config.cache_classes = false
  config.whiny_nils = true
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false
  config.action_mailer.raise_delivery_errors = false
  config.active_support.deprecation = :log
  config.action_dispatch.best_standards_support = :builtin
  config.active_record.mass_assignment_sanitizer = :strict
  config.active_record.auto_explain_threshold_in_seconds = 0.5
  config.assets.compress = false
  config.assets.debug = true
end

Production.rb

Web::Application.configure do
  config.cache_classes = false
  config.consider_all_requests_local       = true # default false, zobrazuje errory
  config.action_controller.perform_caching = false # default true
  config.serve_static_assets = false
  config.assets.compress = true
  config.assets.compile = true # default false
  config.assets.digest = true
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
end
19
Muflix

これは、

_  config.serve_static_assets = false
_

_production.rb_ファイル内。

Rails構成ガイド から:

  • _config.serve_static_assets_は、静的アセットを提供するようにRails自体を構成します。デフォルトはtrueですが、本番環境ではアプリケーションの実行に使用されるサーバーソフトウェア(NginxやApacheなど)が静的アセットを提供するため、オフになっています。デフォルト設定とは異なり、実行時(絶対にお勧めしません!)またはWEBrickを使用して本番モードでアプリをテストする場合は、これをtrueに設定します。ページキャッシュを使用できなくなり、パブリックディレクトリの下に定期的に存在するファイルへのリクエストは、とにかくRailsアプリにヒットします。

そして、そのガイドが示唆するように、あなたは本当にあなたのRailsアプリを介して_public/_からアセットを提供することに依存すべきではありません、それはウェブサーバー(例えばApacheやNginx)に処理させることをお勧めします)パフォーマンスのためにアセットを提供します。

27
Stuart M

Rails 4および5。

Rails 4の場合:

config.serve_static_files = true

Rails 5の場合:

config.public_file_server.enabled = true
29
juanpastas