【问题标题】:What can cause Rails 3.1 "= require jquery" to stop working?什么会导致 Rails 3.1 "= require jquery" 停止工作?
【发布时间】:2011-07-26 20:58:48
【问题描述】:

我正在将 Rails 3.0.9 应用程序移植到 Rails 3.1.rc5。我的application.js 和 Rails 3.1 自己生成的完全一样:

// This is a manifest file ...
//
//= require jquery
//= require jquery_ujs
//= require_tree .

但是当我运行我的应用并在 Firebug 或 Chrome 开发者工具中查看 application.js 时,我看到的只是:

// This is a manifest file ...
//

指令消失了,所以看起来文件 已被 Sprockets 处理,但指令并没有被 jquery 等的内容替换。服务器控制台或日志中没有出现任何错误。

奇怪的是,当我运行 blog 应用程序(你知道,canonical tutorial app)时它运行良好(也就是说,当我在 Firebug 中检查 application.js 时,它包含 jQuery 的文本。)这似乎表明 my 应用程序中的某些东西以某种方式干扰了 Sprocket。有没有人听说过这样的问题(希望有解决方法)?

这是我的设置:

$ gem list jquery

*** LOCAL GEMS ***

jquery-rails (1.0.12)
$ ruby -v
ruby 1.9.2p290 (2011-07-09) [i386-mingw32]
$ rails -v
Rails 3.1.0.rc5

我不知道可能出了什么问题。我已经三次检查了我的 Gemfile;我已经运行并重新运行bundle installbundle update;我试过 rc3、rc4 和现在的 rc5;我正在运行 Ruby 1.9.2p290。有什么想法吗?

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby-on-rails-3.1 sprockets


    【解决方案1】:

    一种解决方法:包含带有 old-skool 标记的 JavaScript 文件。例如,在我的 (Haml) 布局中:

    = javascript_include_tag '/assets/jquery.js'
    = javascript_include_tag '/assets/jquery_ujs.js'
    = javascript_tag 'jQuery.noConflict();'
    

    /assets/ 前缀告诉 Rails 3.1.x 查看包含 gem 的 资产路径,因此您将获得与 Sprockets 指令相同的文件。但是您不会得到连接或任何其他 Sprockets 预处理。

    仍在寻找更好的解决方案。

    【讨论】:

    • 我看到了同样的事情。这件事在 RC5 上的表现超出了我的想象。
    • 这里相同,但在 Rails 3.1 稳定版上!