Asset Pipeline Rails 3.2不在生产中工作

时间:2013-04-24 08:24:24

标签: ruby-on-rails apache

如何使Apache + Passenger和Rails Asset Pipeline协同工作?

当我部署本地工作项目时,我收到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 grep 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

那么可能出了什么问题?为什么不起作用?

3 个答案:

答案 0 :(得分:0)

如果application.js没有加载该文件,那么您需要在application.rb添加一行,以便应用知道:

config.assets.precompile += ['jquery-ui-1.8.21.custom.min.js']

答案 1 :(得分:0)

shared/assets不是资产管道通常查找文件的地方。

通常情况下,资产管道会在app/assets中查找,它可能会显示在lib/assets中,我很确定它也会在vendor/assets中查看。但默认情况下可能不会包含vendor/assets,我将在下面讨论。

Per Rails惯例我建议你把这种依赖放在vendor/assets/javascripts

如果要将搜索目录添加到资产管道,只需对config.application.rb

进行简单修改即可

YourProject::Application声明中,添加:

config.assets.paths << Rails.root.join("vendor/assets/javascripts")

或者你想要的任何其他路径。

答案 2 :(得分:0)

我想我解决了..我认为这是步骤:

  • 重命名capistrano部署的rake-namespace(可能重复名称空间和var损坏),这也是在进行预编译
  • 将我通过javascript_include_tag添加的每个js文件添加到config.assets.precompile,用于@Simon建议的生产环境
  • 在config.assets.precompile中
  • 似乎没有.js-extension提及它们,而在javascript_include_tag指令中它们应该包含在.js-extension