15

アセット パイプラインを使用しようとすると、このエラーが発生します。何が原因なのかわかりません。

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Photos#show

Showing .../app/views/photos/_photo_view.html.haml where line #2 raised:

jquery.autocomplete isn't precompiled

Extracted source (around line #2):

1: - content_for :scripts do
2:  = javascript_include_tag 'jquery.autocomplete'

ただし、これはプリコンパイルされています。rake assets:precompile RAILS_ENV=productionサーバーを起動する前に実行したところ、public/assetsディレクトリに file:jquery-5550a245a55b28927b5552cac182e612.autocomplete.js.js.gzがあり、マニフェストに正確に反映されています:

#manifest.yml
---
application.js: application-4277323e3f7506b71f45c71e8a3a7c8f.js
jquery.autocomplete.js: jquery-5550a245a55b28927b5552cac182e612.autocomplete.js
jquery.cycle.all.min.js: jquery-183ef696b43944deaee5778d3094dbdd.cycle.all.min.js
jquery.fancybox.js: jquery-e52e44b2b4fb349bade9beb91461a810.fancybox.js
jquery.plupload.queue.js: jquery-f2e7f6ad7d2e5ca50235ed21f8d573cc.plupload.queue.js
jquery.tools.js: jquery-c53e304240fa56767fe0f2a00cb4bceb.tools.js
plupload.full.js: plupload-5dd26ee3fff6b627c19f196e9d1429dd.full.js
application.css: application-ce5217e1714cbc4e9c3ff6c5dfc9b221.css
fancybox.css: fancybox-9ee9c36f391086e4b0629b7df4042390.css
jquery.plupload.queue.css: jquery-661fbf3f503aa32ff11c004838c0820b.plupload.queue.css
jquery.js: jquery-4d23f0cfea862f56deb04f0a8ab1fcee.js
jquery.min.js: jquery-8a50feed8d29566738ad005e19fe1c2d.min.js

問題の JavaScript ファイルは、application.js1 つのビューでのみ必要であり、アプリの他の場所では使用しないため、ファイルに読み込まれません。それを説明するために(そしてsassパーシャルをコンパイルしようとするスプロケットを修正するために)、プリコンパイル正規表現を次のように構成しました:

#environments/production.rb
config.assets.precompile = [/^[a-zA-Z]*\..*/]

(上記の正規表現は、文字で始まるファイルをプリコンパイルし、アンダースコアなどの文字以外の文字で始まるファイルを無視します)。

これを引き起こしている原因とそれを修正する方法について誰かが洞察を持っていますか? アセット パイプラインに頭が下がります。

アップデート

Rails.configuration.assets.digests が本番環境で nil を返していることがわかりました。何らかの理由でスプロケットが manifest.yml を見つけられないため、問題がある可能性があります。

私はおそらく間違っていますが、manifest.yml を探すときにスプロケットが設定で assets_host を使用していないようです。

https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/railtie.rb#L38

4

3 に答える 3

16

.jsに追加

javascript_include_tag 'jquery.autocomplete.js'

足りない機能があるようです。ファイル名にピリオド「.」が含まれる場合 名前に.js、ダイジェストを調べたときに拡張子が追加されません。

私はいくつかのデバッグを行いましたが、メソッドは.jsなしで論理パスを取得するSprockets::Helpers::RailsHelperようです。digest_for

于 2011-10-15T20:22:39.990 に答える
4

config.assets.compile = false上記の例はフラグが に設定されていると思われるため、設定されていますが、私は自分で問題に取り組んでいtrueます。

ローカルの本番レール 3.1.3 サーバーでパイプライン経由でアセットを構成できない

私の観察では、UberNeet が提案したように、Sprockets 2.0.3 のバグであるという結論に達しました。回避策は、アセット名からピリオドを削除するか、直接リンクするのではなく、マニフェストの一部として含めることでした。

このバグレポートはこちら: https://github.com/rails/rails/issues/3398

上記の問題を見て、過去 2 日間の私の経験と合わせて、config.assets.compile = trueが設定されている場合のアセットの命名に関連する問題があると思われます。この問題は、おそらくアセットの命名に起因します。マニフェストには、次のようにコンパイルされた jquery.autocomplete ライブラリがあります。

jquery-5550a245a55b28927b5552cac182e612.autocomplete.js

しかし、rake を使用してこれらのアセットをプリコンパイルするrake assets:precompileと、実際には次のようにコンパイルされると思います。

jquery.autocomplete-5550a245a55b28927b5552cac182e612.js

あなたが言及した問題を引き起こしているのは、おそらくこの不一致です。回避策は上にリストされていますが、これについても別の github の問題を提起する価値があるかもしれません。また、Rails 3.2 が Sprockets 2.1.0 を使用することを理解しています。これには、この問題の修正が既に含まれている可能性があります。

于 2012-01-19T06:38:29.880 に答える
0

Be shure that it isn't required before in application.js for example.

于 2012-06-01T01:19:14.987 に答える