Rails 3.1アセットパイプラインに問題があります。アセットは開発に2回含まれています:
<script src="/assets/main_new.js?body=1" type="text/javascript"></script>
<script src="/assets/pagenav.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.controller.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
Railsはどういうわけかコンパイルしてapplication.jsをインクルードするので、すべてのスクリプトは個別のファイルとして、そしてアプリケーションに2回インクルードされます。 js
本番環境でプリコンパイルされたアセットを使用すれば、すべて問題ありません。
development.rb
config.assets.compress = false
config.assets.debug = true
production.rb
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
# Compress both stylesheets and JavaScripts
config.assets.compress = true
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :scss
config.assets.compile = false
config.assets.digest = true
application.rb
config.assets.enabled = true
以下をdevelopment.rbに追加してみてください。
config.serve_static_assets = false
...そしてブラウザのキャッシュをクリアします(コメントに基づいて更新)
静的アセットとは、パブリック/アセット内のプリコンパイル済みアセットを指します。ここで、rake assets:precompile
それらを置きます。
何が起こっているのかというと、パブリック/アセットに存在するものはすべて、アプリ/アセットにサービスを提供している場合はそれを上書きします。したがって、jsタグがapp/assets/application.jsを識別しようとしているときに、public/assets /application.jsがロードされます。
/ public/assetsを削除したら、ブラウザのキャッシュもクリアする必要があります。
これは私に問題を引き起こしました。次のように設定すると、アプリは機能しますが、単一のapplication.jsファイルが含まれます。これは開発には必要ありません。
config.serve_static_assets = false
以前にアセットをプリコンパイルしました(原因のようです)。
それを修正するために、私は次のことをしました:
Rails_ENV=development rake assets:clean
tmp/assetsをクリアしますApplication.jsを編集した後で初めてエラーが発生し、ページに含まれているapplciation.jsが完全なプリコンパイル済みのapplication.jsではなかったことが修正されました。
これらすべてを行う必要があるかどうかはわかりません。また、途中でサーバーを再起動していました。
これによって(まだ)つまずきました-//= require
の最後にあるすべてのapplication.js
ディレクティブの後に、空白行を追加することを忘れないでください!
より少ないファイルで同じ問題を追加します。
ここから ドキュメント :
開発モードでは、アセットはマニフェストファイルで指定された順序で個別のファイルとして提供されます。
私の解決策は、*= require_tree .
からapplication.css.less
行を削除し、lessから@import "my-styles";
のみを使用することでした。
たぶんあなたはjavascriptで同様の解決策を見つけることができます...