如何使Apache+客运和Rails资产管道一起工作好吗?
当我部署本地工作项目时,我得到一个500错误
In ActionView::Template::Error occurred in pages#start: jquery-ui-1.8.21.custom.min isn't precompiled
如果我将my_project/current/assets_manifest.yml
代入jquery-ui-1.8
,得到
jquery-ui-1.8.21.custom.min.js: jquery-ui-1.8.21.custom.minc50ea0bef9c2fae04ab3b50ead60fc1f.js
和此文件也存在于my_project/shared/assets
(连同jquery-ui-1.8.21.custom.min-c50ea0bef9c2fae04ab3b50ead60fc1f.js.gz, jquery-ui-1.8.21.custom.min.js, jquery-ui-1.8.21.custom.min.js.gz)。
当我打开http://mytestserver/assets/jquery-ui-1.8.21.custom.min-c50ea0bef9c2fae04ab3b50ead60fc1f.js
在浏览器中,它给我正确的js文件。
从
引发500错误app/views/layouts/application.haml:25
文件的第24-26行是:
= javascript_include_tag "application"
= javascript_include_tag "jquery-ui-1.8.21.custom.min"
= csrf_meta_tag
那么到底是哪里出了问题呢?为什么不工作?
如果文件没有被application.js
加载,那么你需要在application.rb
中添加一行,以便应用程序知道它:
config.assets.precompile += ['jquery-ui-1.8.21.custom.min.js']
shared/assets
不是资产管道通常查找文件的地方。
通常资产管道看起来在app/assets
,它可能看起来在lib/assets
,我很确定它看起来在vendor/assets
也。但是vendor/assets
可能默认不包含,我将在下面讨论。
根据Rails惯例,我建议您将依赖项放在vendor/assets/javascripts
如果你想添加搜索目录到资源管道,它只是一个简单的修改config.application.rb
在YourProject::Application
声明中,添加:
config.assets.paths << Rails.root.join("vendor/assets/javascripts")
或者其他你想要的路径
我想我解决了。我想这是步骤:
- 重命名capistrano部署的rake命名空间(可能重复命名空间和var damage),它也在做预编译
- 添加我通过
javascript_include_tag
包含的每个js文件到config.assets.precompile用于生产环境,如@Simon建议的 - 在config.assets.precompile中似乎没有提到。js-extension,而在
javascript_include_tag
指令中,它们应该包含在。js-extension 中。