1

如何让 Apache+Passenger 和 Rails Asset Pipeline 很好地协同工作?

当我部署本地工作项目时,出现 500 错误

In ActionView::Template::Error occurred in pages#start: jquery-ui-1.8.21.custom.min isn't precompiled

如果我 grep my_project/current/assets_manifest.ymlfor 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

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

4

3 回答 3

0

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

config.assets.precompile += ['jquery-ui-1.8.21.custom.min.js']
于 2013-04-24T09:07:16.940 回答
0

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

  • 重命名 capistrano 部署的 rake 命名空间(可能重复命名空间和 var 损坏),这也在进行预编译
  • 将我包含的每个 js 文件添加javascript_include_tag到 config.assets.precompile 以用于生产环境,如@Simon 建议的
  • 在 config.assets.precompile 中,它们似乎在没有 .js-extension 的情况下被提及,而在javascript_include_tag指令中它们应该包含在 .js-extension 中
于 2013-04-25T07:20:03.080 回答
0

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")

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

于 2013-04-24T13:10:18.893 回答