如果config.assets.compile = false,为什么我的rails应用程序无法在生产中运行?

时间:2012-04-01 16:45:31

标签: ruby-on-rails ruby-on-rails-3

我对铁杆很新,很抱歉,如果这是一个愚蠢的问题。我构建了一个Rails 3.2应用程序,并准备在生产中部署。

我运行了rake资产:预编译,花了一段时间在public / assets /目录中创建了一些文件。

问题在于,当我在生产中启动服务器时,它给出了“我们很抱歉”的错误,我在生产日志中看不到一个新行,尽管它具有适当的权限。

在nginx / webrick日志中,唯一出现的是:

cache: [GET /] miss

所以我尝试了一些事情,最后在将config.assets.compile设置为true之后,它确实有效。

我的问题是为什么会这样?它是一个有问题的文件还是预编译任务无法编译的东西?

我有一个特定的css文件(仅适用于IE):

<!--[if IE ] --><%= stylesheet_link_tag 'ie' %><!-- [endif]-->

这给出了404错误。使用assets / stylesheets / application.css包含所有其他文件。

2 个答案:

答案 0 :(得分:3)

问题是您的文件名为ie(而不是application)。默认情况下,Rails仅编译application.jsapplication.css

通过将config.assets.compile设置为true,您启用了准备ie.css文件的资产管道后备

要将ie.css样式表包含在编译过程中,您必须像这样添加:

config.assets.precompile += %w(ie.css)

答案 1 :(得分:0)

在生产环境中,Rails希望您预先编译资产,而不是动态地为它们提供服务。

您需要运行rake assets:precompile,Rails将构建支持您的应用生产所需的静态资产。这通常涉及将SASS和CoffeeScript分别转换为缩小/压缩的CSS和JavaScript。这可以防止在每个请求上编译脚本/样式表的成本,这是您不希望在生产环境中发生的事情。

如果您遗漏了一个样式表,例如您未通过资产管道提供的ie.css,则可以指定一个绝对路径,以防止资产助手提供{{1 }}:

/assets