4

Rails (3.2.7) でのアセットの事前コンパイルに問題があります。

次のようなファビコンを含めています。

<link rel="icon" type="image/png" href="<%= image_path("favicon.png") %>" />

開発モードで設定しconfig.assets.compile = trueました。レンダリングされた HTML は次のようになります。

<link rel="icon" type="image/png" href="/assets/favicon.png" />

しかし、私が設定した本番環境ではconfig.assets.compile = false、エラーが発生します

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Home#index
...
favicon.png isn't precompiled

私はすでに実行rake assets:precompileしており、アセットが で利用可能であることを明確に確認できますpublic/assets/favicon.png

本番環境に設定できることはわかっconfig.assets.compile = trueていますが、(パフォーマンス上の理由から) そうしたくありません。

私のレールアプリが本番環境のアセットへの正しいパスを解決できないのはなぜですか? ありがとう!


更新: 知っておくと便利かもしれません: 画像だけでなく、他のアセットでも発生します。

たとえば、config.assets.compile が false に設定されている場合に<%= stylesheet_link_tag "screen", :media => "all" %>もエラーが発生します。screen.css isn't precompiled

4

2 に答える 2

1

わかりました、数回試行した後、これを修正する方法を見つけました。それにもかかわらず、それは少し奇妙で、私を完全に満足させるものではありません. true に設定し、次digestへのパスを提供した場合にのみ機能しました。manifest

config.assets.compile = false
config.assets.digest = true
config.assets.manifest = Rails.root.join("public/assets")

この「ロジック」の背後にあるものを知ることは興味深いでしょう。

于 2012-09-12T14:25:42.270 に答える
1

どのアセットをプリコンパイルするかを Rails に伝える必要があります。これは config key で、config/application.rbまたはconfig keyconfig/environments/production.rbを使用して行います。config.assets.precompile

Rails は、 を含むプリコンパイルするアセットのデフォルト リストから始まります["application.js", "application.css"]が、独自のアセットもプリコンパイルする場合は、それらをリストに追加する必要があります。

例えば:

# config/application.rb
module MyApp
  class Application < Rails::Application
    # other config ...

    config.assets.precompile += ["screen.css", "*.png"]
  end
end
于 2012-09-11T11:43:54.880 に答える