关于 jquery:在 lib 中找不到 app/assets 时工作的插件

Plugin which works when in app/assets can't be found in lib

我的 lib 文件夹中有一个来自我下载的插件 (http://www.datatables.net/) 的 javascript 文件。具体来说,在 app/lib/assets/javascripts/datatables/datatables.js (这是我重命名的文件 jquery.dataTables.min.js ,因为我认为它可能有问题,因为我试图要求整个位 jquery/数据表.min).

我的 app/assets/javascripts/application.js 文件中有以下内容:

1
2
3
4
5
//= require jquery
//= require jquery_ujs
//= require jquery_nested_form
//= require lib/assets/javascripts/datatables
//= require_tree .

我也试过了

1
//= require datatables

而不是 lib/assets/javascripts/datatables

我收到 Sprockets 无法在 c:/Sites/my-app-name/app/assets/javascripts/application.js 中找到文件数据表的错误
它似乎没有在 lib/assets 中查找。当我将它放在 /app/assets/javascripts 目录中尝试时,该插件有效,但我知道这不是它真正应该去的地方。我还在 vendor目录中尝试过,但没有成功,并在服务器上通知我,对于 Rails 4.0,它需要位于 lib 目录中。

我研究并尝试过的修复失败:

  • 重新启动服务器(作为修复它的第一次尝试,并且在我尝试过的每个修复之后。)

  • 包括

    config.autoload_paths = 目录["#{config.root}/lib/**/"]
    在 /app/config/application.rb

  • 将文件从 lib/assets/javascripts/datatables.js 移动到 lib/assets/javascripts/datatables/datatables.js

  • 在 lib/assets/javascripts/datatables/ 中创建一个 index.js 文件,内容如下:

    //= 需要数据表
    //= 要求树 .

  • 在 app/javascripts/application.js 中只需要文件名,或者需要路径。
    我试过

    //= 需要数据表

    //= 需要 lib/assets/javascripts/datatables

    //= 需要 /lib/assets/javascripts/datatables/datatables

  • 当我输入 /lib/assets/javascripts/datatables/datatables 时,我没有收到错误消息,并且我的页面已加载。但是,该插件无法正常工作,该站点看起来就像没有该插件一样。这是唯一的事情(除了将 .js 插件文件放在 app/assets/javascripts/ 目录中,它完全改变了错误消息。否则它是相同的错误消息。

    有没有我没有想到我应该尝试的解决方案? lib 是适合它的地方吗?

    感谢您的帮助。


    1
    //= require datatables/datatables

    这就是您在 app/assets/javascripts/application.js 文件中加载文件 lib/assets/javascripts/datatables/datatables.js

    所需的全部内容

    我喜欢做的是维护一个 lib/assets/javascripts/lib.js 文件和一个 vendor/assets/javascripts/vendor.js 文件。

    在我的 app/assets/javascripts/application.js 文件中,我只有

    1
    2
    //= require vendor
    //= require lib

    datatables/ 目录确实属于vendor/assets/javascripts/,而不是您的lib/ 目录。来自 Rails 指南

    • lib/assets is for your own libraries' code that doesn't really fit into the scope of the application or those libraries which are shared across applications.
    • vendor/assets is for assets that are owned by outside entities, such as code for JavaScript plugins and CSS frameworks.

    一旦你移动了这个目录,你可以在 vendor/assets/javascripts/vendor.js 中添加

    1
    //= require datatables/datatables

    最后,尽管您似乎已经为自己解决问题做出了令人钦佩的努力,但您似乎还没有通读 Asset Pipeline 上的 Rails 指南 - 如果您还没有阅读,您应该考虑这样做。