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

[解決済み] Rails 4: アセットがプロダクションでロードされない

2022-08-22 21:59:14

質問

アプリを本番に投入しようとしているのですが、画像やCSSのアセットパスがうまくいきません。

現在、私がやっていることは以下の通りです。

  • 画像アセットは/app/assets/images/image.jpgに格納されています。
  • スタイルシートは/app/assets/stylesheets/style.cssに格納されています。
  • 私のレイアウトでは、このようにcssファイルを参照しています。 <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %>
  • unicornを再起動する前に RAILS_ENV=production bundle exec rake assets:precompile を実行すると成功し、フィンガープリントされたファイルが public/assets ディレクトリにあります。

自分のサイトにアクセスすると、404 not found エラーになります。 mysite.com/stylesheets/styles.css .

私は何を間違えているのでしょうか?

更新しました。 私のレイアウトでは、このようになります。

<%= stylesheet_link_tag    "bootstrap.min", media: "all", "data-turbolinks-track" => true %>
<%= stylesheet_link_tag    "styles", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

生成ソースはこれです。

<link data-turbolinks-track="true" href="/stylesheets/bootstrap.min.css" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/stylesheets/styles.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-0c647c942c6eff10ad92f1f2b0c64efe.js"></script>

RailsがコンパイルされたCSSファイルを適切に探していないようです。しかし、非常に紛らわしいことに なぜ はjavascriptsに対しては正しく動作しているのですが、( /assets/****.js のパスに注目してください)。

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

/config/environments/production.rb これを追加する必要がありました。

Rails.application.config.assets.precompile += %w( *.js ^[^_]*.css *.css.erb )

.jsはすでにプリコンパイルされていたのですが、とりあえず追加してみました。.cssと.css.erbはどうやら自動的には行われないようです。その ^[^_] は部分的なものをコンパイルから除外しています -- 正規表現です。

ドキュメントには、アセット パイプラインがデフォルトで有効であると明確に述べられていますが、JavaScript にのみ適用されるという事実が明らかにされていないのは少し不満です。