Rails 4のアプリケーションがあります
<%= javascript_include_tag "modernizr", "data-turbolinks-track" => true %>
頭の中で。開発では、次のHTMLがレンダリングされ、modernizrがロードされます。
<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script>
本番環境では、後続のHTMLがレンダリングされ、modernizrはnotロードされます(404が見つかりません):
<script data-turbolinks-track="true" src="/javascripts/modernizr.js"></script>
生産中、 /assets/modernizr.js
が見つかり、閲覧可能です。
Railsドキュメント は、javascript_include_tag
生成する必要があります
<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script>
本番では、私のstylesheet_link_tag
sは問題ありません。/assets/
ディレクトリ。
なぜjavascript_include_tag
リンク/javascripts
の代わりに /assets
本番環境で、どうすれば修正できますか?
AssetUrlHelperの使用法ステートメントの1つは、見ているような/ javascripts/urlを生成することを示しています。
#asset_path "application"、タイプ::javascript#=> /javascripts/application.js
(asset_url_helper.rb行117から-[ 1 ])
このコードは、プリコンパイルされたアセットが見つからない場合にのみ到達できるため、アセットのコンパイルが機能していないように見えます(通常、展開が失敗すると、展開が失敗する可能性があります)。
同じasset_url_helper.rbは、/ javascripts /パーツ「extname」を呼び出し、次のマップを使用して名前の生成方法を認識します。
# Maps asset types to public directory.
ASSET_PUBLIC_DIRECTORIES = {
audio: '/audios',
font: '/fonts',
image: '/images',
javascript: '/javascripts',
stylesheet: '/stylesheets',
video: '/videos'
}
新しいRails 4アプリはconfig/environments/production.rbにこれを持っています
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
あなたが見ている振る舞いと一致するようです。
デフォルトでは、Railsはapplication.js
、application.css
およびアセットパスで見つかった画像のみをプリコンパイルします。したがって、実稼働環境ではmordernizrはプリコンパイルされないため、javascriptヘルパーはコンパイルされません。ファイルを見つけることができなくなります。
この問題を修正するには、production.rb
の次の構成を変更して、modernizrをプリコンパイルリストに追加します。
config.assets.precompile += ['modernizr.js']
詳細については、 Rails Guides を参照してください
次のコマンドを実行して、運用環境でアセットをプリコンパイルしてください。
Rails_ENV=production bundle exec rake assets:precompile
Railsアセットパイプラインのガイドで詳細を確認できます: http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets
Rails 4を使用してHerokuにデプロイした新しいアプリケーションがあります。
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
srcから呼び出されるjavascript application。(fingerprint).js:asset/application.js
私の問題は、別の場所からアセットを定義するproduction.rbに何かがあると思います。
だから、Moderniz.jsをに追加することができます
config.assets.precompile = ['。js'、 '。css'、 '* .css.erb']
config/production.rb内
または、application.jsにmodernizrスクリプトを単に必要とします
// = mordernizrが必要
そして、modernizrスクリプト呼び出しをレイアウトから削除します。
<%= javascript_include_tag "modernizr", "data-turbolinks-track" => true %>
Application.jsが運用環境に提供される場所を確認できますか?