0

先日、送信ボタンをクリックしてフォームが複数回送信されるという Ajax の問題に遭遇しました。ブラウジングを行ったところ、誰かが public/assets フォルダーを削除するように勧めました。そうしてサーバーを再起動したところ、Javascript ライブラリの一部が正しく機能していないことがわかりました...

Firebugデバッガーでソースコードを見ると、確実にロードされていることがわかるので、実際には非常に奇妙です。キャッシュをクリアしようとしたり、アセットを開発モードでプロコンパイルしようとしたり、システムを再起動しようとしたりしましたが、どれも機能しませんでした。public/assets フォルダーを削除した後、Javascript が実行されず、サイレントに失敗します。 -編集を参照

この号の作成方法のクイック リファレンス:

  1. 停止したサーバー
  2. 削除されたパブリック/アセット
  3. サーバーを再起動し、問題に気づきました
  4. キャッシュをクリアしました
  5. サーバーを再度停止し、アセットのプリコンパイルを試みました

私が試した追加のこと:

  1. development.rbに設定config.serve_static_assets = falseし、再度プリコンパイルしてサーバーを再起動
  2. rails s -e development を介して開発モードで実行していることを確認しました

  3. tmp/cache フォルダーを削除しました

追加情報:

  • Rails バージョン 3.1.3 を使用しています

  • 私は最近、開発時に config.cache_classes を true に設定する必要がある Gem を使い始めました。false に設定して再テストすることで、これが問題ではないことを確認しました。

編集

さらにテストしたところ、私の変更により、次のコードがトリガーされないことが示されました。

<script type="text/javascript">
   $(document).ready(function() {
     alert("Hello world!")
   });

</script>

しかし、これはうまくいきます:

<script type="text/javascript">
   alert("Hello world!")
</script>

最初は、アセット パイプラインからファイルがロードされていないと思っていましたが、代わりに、私の変更が舞台裏で何らかの競合を引き起こしたようです。私は自分の application.js ファイルから削除require_treeし、ライブラリを手動で読み込もうとして、ライブラリが再び機能し始めたことを確認しましたが、これは私にとって理想的な修正ではありません。

4

1 に答える 1

0

実は一石二鳥の犯人発見。私の JavaScript ファイルの 1 つは、前述の Ajax 問題の原因である application.js ファイルで既に必要とされていた jquery と jquery_ujs の両方をもう一度必要としていました。まったく同じファイルが、他のすべてを壊したように見えるjqueryドキュメント対応ラッパーに囲まれていないスクリプトを実行していました。

public/assets フォルダーを削除した後にのみ問題が発生したと思います。これは、これらの課題がなかった可能性のあるこのコードの古いバージョンが保存されていたためです。

于 2012-08-03T17:32:15.477 に答える