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 |
这就是您在
所需的全部内容
我喜欢做的是维护一个
在我的
1 2 | //= require vendor //= require lib |
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.
一旦你移动了这个目录,你可以在
1 | //= require datatables/datatables |
最后,尽管您似乎已经为自己解决问题做出了令人钦佩的努力,但您似乎还没有通读 Asset Pipeline 上的 Rails 指南 - 如果您还没有阅读,您应该考虑这样做。