web-dev-qa-db-ja.com

javascript_include_tag Rails 4本番環境で「/ assets」の代わりに「/ javascripts /」を生成

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_tagsは問題ありません。/assets/ディレクトリ。

なぜjavascript_include_tagリンク/javascripts の代わりに /assets本番環境で、どうすれば修正できますか?

32
Stuart

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

あなたが見ている振る舞いと一致するようです。

21
mobileAgent

デフォルトでは、Railsはapplication.jsapplication.cssおよびアセットパスで見つかった画像のみをプリコンパイルします。したがって、実稼働環境ではmordernizrはプリコンパイルされないため、javascriptヘルパーはコンパイルされません。ファイルを見つけることができなくなります。

この問題を修正するには、production.rbの次の構成を変更して、modernizrをプリコンパイルリストに追加します。

config.assets.precompile += ['modernizr.js']

詳細については、 Rails Guides を参照してください

12
patkoperwas

次のコマンドを実行して、運用環境でアセットをプリコンパイルしてください。

Rails_ENV=production bundle exec rake assets:precompile

Railsアセットパイプラインのガイドで詳細を確認できます: http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

4
Ross Allen

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が運用環境に提供される場所を確認できますか?

1
rbinsztock