1

わかりました。アセット パイプラインが開発マシンで突然動作し始めました。以前は機能していた JS 関数が「関数ではありません」というエラーをスローするようになりました。1 分前に datatables jquery 関数が機能していた後、エラーをスローし、その後機能していましたが、現在は機能していないか、エラーをスローしています。

これが私のapplication.jsです

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require_self
//= require_tree .
//= require dataTables/jquery.dataTables
//= require dataTables/jquery.dataTables.bootstrap
//= require bootstrap
//= require bootstrap-tooltip
//= require bootstrap-popover
//= require bootstrap-tab
//= require bootstrap-modal
//= require bootstrap-alert
//= require bootstrap-dropdown
//= require jquery.ui.addresspicker
//= require raty
//= require jquery.alphanumeric
//= require jquery.formrestrict
//= require select2
//= require chosen/chosen.jquery
//= require highcharts
//= require jquery.lazyload

これが私のレイアウトヘッダーの一部です:

  <%= stylesheet_link_tag "application", media: "all" %>
  <%= yield(:scripthead) %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>    
  <%= yield(:head) %>   

上記では、yield を使用して Google からオンライン スクリプトをロードしています。それらは一部のページでのみ必要なためです。アプリケーション レイアウトに含まれていると、一般的にサイトの速度が低下します。利回りを削除しようとしましたが、ブラウザーのキャッシュをクリアして rake assets:clean を実行した後でも、問題は解決しませんでした (念のため)。

CSS とメタタグの間に表示されるものは次のとおりです (yield スクリプトヘッドに nothin があるページの場合):

  <script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<script src="/assets/aidmodels.js?body=1" type="text/javascript"></script>
<script src="/assets/audio.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-alert.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-dropdown.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-modal.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-popover.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-tab.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-tooltip.js?body=1" type="text/javascript"></script>
<script src="/assets/branches.js?body=1" type="text/javascript"></script>
<script src="/assets/charts.js?body=1" type="text/javascript"></script>
<script src="/assets/chosen/backup_chosen.jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/chosen/chosen.jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/consumers.js?body=1" type="text/javascript"></script>
<script src="/assets/dispensers.js?body=1" type="text/javascript"></script>
<script src="/assets/favorites.js?body=1" type="text/javascript"></script>
<script src="/assets/features.js?body=1" type="text/javascript"></script>
<script src="/assets/generic_styles.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.base.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.bing.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.googlemaps.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.mapquest.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.openlayers.js?body=1" type="text/javascript"></script>
<script src="/assets/highcharts.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui-1.8.18.custom.min.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.alphanumeric.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.formrestrict.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.lazyload.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.ui.addresspicker.js?body=1" type="text/javascript"></script>
<script src="/assets/likes.js?body=1" type="text/javascript"></script>
<script src="/assets/messages.js?body=1" type="text/javascript"></script>
<script src="/assets/overalls.js?body=1" type="text/javascript"></script>
<script src="/assets/pages.js?body=1" type="text/javascript"></script>
<script src="/assets/questions.js?body=1" type="text/javascript"></script>
<script src="/assets/raty.js?body=1" type="text/javascript"></script>
<script src="/assets/reviews.js?body=1" type="text/javascript"></script>
<script src="/assets/sessions.js?body=1" type="text/javascript"></script>
<script src="/assets/styles.js?body=1" type="text/javascript"></script>
<script src="/assets/tickets.js?body=1" type="text/javascript"></script>
<script src="/assets/universities.js?body=1" type="text/javascript"></script>
<script src="/assets/users.js?body=1" type="text/javascript"></script>
<script src="/assets/dataTables/jquery.dataTables.js?body=1" type="text/javascript"></script>
<script src="/assets/dataTables/jquery.dataTables.bootstrap.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-transition.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-affix.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-button.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-carousel.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-collapse.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-scrollspy.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-typeahead.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap.js?body=1" type="text/javascript"></script>
<script src="/assets/select2.js?body=1" type="text/javascript"></script>

application.rb から:

config.assets.initialize_on_precompile = false
# Enable the asset pipeline
config.assets.enabled = true
config.action_controller.assets_dir = "#{File.dirname(File.dirname(__FILE__))}/public"

# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'

申し訳ありませんが、このパズルを解くために他に何を含めればよいかわかりませんが、アドバイスをいただければ幸いです。heroku へのアップロードを開始する前は問題はありませんでしたが、今ではすべてがうまくいきません。

編集:

現時点でコンソールに表示されている

Uncaught TypeError: Cannot read property 'Constructor' of undefined bootstrap-popover.js:33
Uncaught ReferenceError: google is not defined jquery.ui.addresspicker.js:25
Uncaught TypeError: Object [object Object] has no method 'popover' overall:476

編集2:

以下のコメントの1つのおかげで、私はこれを理解することができました. より意味のあるものにするために、application.js のインクルードを再シャッフルする必要がありました。

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require bootstrap
//= require bootstrap-tooltip
//= require bootstrap-popover
//= require bootstrap-tab
//= require bootstrap-modal
//= require bootstrap-alert
//= require bootstrap-dropdown
//= require dataTables/jquery.dataTables
//= require dataTables/jquery.dataTables.bootstrap
//= require jquery.ui.addresspicker
//= require raty
//= require jquery.alphanumeric
//= require jquery.formrestrict
//= require select2
//= require chosen/chosen.jquery
//= require highcharts
//= require jquery.lazyload
//= require_self
//= require_tree .

OMG、これは私をバナナに駆り立てています.. いいえ、まだ機能していません。その最後の編集では、すべてが適切に機能していましたが、rake assets:precompile を再度実行して、heroku にプッシュしました。Heroku で再び動作していませんでした。信じられないかもしれませんが、localhost バージョンに戻ったとき、壊れていました。再び、さまざまなエラーが発生し、データテーブルをロードしていません。

Uncaught ReferenceError: google is not defined jquery.ui.addresspicker.js:25
Uncaught ReferenceError: google is not defined application.js:26
Uncaught TypeError: Object [object Object] has no method 'lazyload' overall:496
4

2 に答える 2

3

JS のどこかにセミコロンを忘れていませんか? アセット パイプラインはコードのクリーニングを行いません...

ブラウザの JS コンソールを見て、エラーが発生している場所を確認してください...

編集:わかりました、何が起きているのか見てみましょう。最後にを取り出して、require_tree明示的に指定していない他の JS ファイルを手動でロードしてみてください。最終的に発生するのrequire_treeは、明示的にリストされた以前の require をオーバーライドし、それらをアルファベット順にロードすることです。

また、bootstrap.jsに使用しているgem(または使用している場合)もわかりませんがtwitter/bootstrap、単に代わりに使用してみてくださいbootstrap

于 2012-11-11T04:27:17.130 に答える
0

これはどのような環境で発生していますか?env/production.rb または実行している環境で試してみてくださいconfig.assets.enabled = true。この設定は、本番環境ではデフォルトでオフになっていると思います。

于 2012-11-11T04:29:21.327 に答える