资产管道Rails 3.2不能在生产环境中工作



如何使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
  • 中。

最新更新