And*_*rew 15 ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline
好的,当我尝试使用资产管道时,我收到此错误.我不明白是什么导致了它.
Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Photos#show
Showing .../app/views/photos/_photo_view.html.haml where line #2 raised:
jquery.autocomplete isn't precompiled
Extracted source (around line #2):
1: - content_for :scripts do
2: = javascript_include_tag 'jquery.autocomplete'
Run Code Online (Sandbox Code Playgroud)
但是,这是预先编译的.我rake assets:precompile RAILS_ENV=production在启动服务器之前跑了,在我的public/assets目录中我有文件:jquery-5550a245a55b28927b5552cac182e612.autocomplete.js以及它.js.gz,它准确地反映在清单中:
#manifest.yml
---
application.js: application-4277323e3f7506b71f45c71e8a3a7c8f.js
jquery.autocomplete.js: jquery-5550a245a55b28927b5552cac182e612.autocomplete.js
jquery.cycle.all.min.js: jquery-183ef696b43944deaee5778d3094dbdd.cycle.all.min.js
jquery.fancybox.js: jquery-e52e44b2b4fb349bade9beb91461a810.fancybox.js
jquery.plupload.queue.js: jquery-f2e7f6ad7d2e5ca50235ed21f8d573cc.plupload.queue.js
jquery.tools.js: jquery-c53e304240fa56767fe0f2a00cb4bceb.tools.js
plupload.full.js: plupload-5dd26ee3fff6b627c19f196e9d1429dd.full.js
application.css: application-ce5217e1714cbc4e9c3ff6c5dfc9b221.css
fancybox.css: fancybox-9ee9c36f391086e4b0629b7df4042390.css
jquery.plupload.queue.css: jquery-661fbf3f503aa32ff11c004838c0820b.plupload.queue.css
jquery.js: jquery-4d23f0cfea862f56deb04f0a8ab1fcee.js
jquery.min.js: jquery-8a50feed8d29566738ad005e19fe1c2d.min.js
Run Code Online (Sandbox Code Playgroud)
有问题的javascript文件没有加载到我的application.js文件中,因为我只需要在一个视图上使用它,不要在应用程序的任何其他地方使用它.为了解释这一点(并修复链接尝试编译sass部分)我配置了我的预编译regexp,如下所示:
#environments/production.rb
config.assets.precompile = [/^[a-zA-Z]*\..*/]
Run Code Online (Sandbox Code Playgroud)
(上面的regexp预编译任何以字母字符开头的文件,并忽略以非字母字符开头的文件,如下划线).
有没有人能够了解导致这种情况的原因以及如何解决这个问题?资产管道让我脱掉了头发!
刚刚发现Rails.configuration.assets.digests在生产中返回nil.也许问题存在,由于某种原因,链轮没有找到manifest.yml.
我可能错了,但看起来sprockets在查找manifest.yml时没有在config中使用assets_host.
https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/sprockets/railtie.rb#L38
guz*_*art 16
添加.js到
javascript_include_tag 'jquery.autocomplete.js'
似乎缺少功能.当文件名具有句点'.'时 在名称中,.js查看摘要时不会添加扩展名.
我做了一些调试,Sprockets::Helpers::RailsHelper似乎digest_for方法得到没有.js的逻辑路径.
我自己一直在努力解决这个问题,尽管使用了config.assets.compile = falseset,因为我怀疑上面的示例将标志设置为true。
无法通过本地生产 Rails 3.1.3 服务器上的管道配置资产
我的观察结果是,正如 UberNeet 所建议的那样,这是一个 Sprockets 2.0.3 的错误。解决方法是从资产名称中删除句点,或者将其包含在清单中,而不是直接链接到它。
错误报告在这里:https://github.com/rails/rails/issues/3398
看看上面的问题,并结合我过去两天的经验,我怀疑config.assets.compile = true设置时资产命名存在相关问题。这个问题可能源于资产命名 - 您的清单将 jquery.autocomplete 库编译为:
jquery-5550a245a55b28927b5552cac182e612.autocomplete.js
Run Code Online (Sandbox Code Playgroud)
但是当您使用 rake 预编译这些资产时rake assets:precompile,我相信它们实际上被编译为:
jquery.autocomplete-5550a245a55b28927b5552cac182e612.js
Run Code Online (Sandbox Code Playgroud)
可能正是这种差异导致了您提到的问题。可能也值得为此提出另一个 github 问题,尽管上面列出了解决方法,并且我知道 Rails 3.2 将使用 Sprockets 2.1.0,其中可能已经包含此问题的修复程序。
| 归档时间: |
|
| 查看次数: |
7438 次 |
| 最近记录: |