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



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

我运行了rake-assets:precompile,它花了一段时间,并在public/assets/目录中创建了一些文件。

问题是,当我在生产中启动服务器时,它给出了"我们很抱歉"的错误,尽管它有适当的权限,但我在生产日志中看不到任何新行。

在nginx/webrick日志中,唯一显示的是:

cache: [GET /] miss

所以我尝试了一些方法,最后在将config.assets.comfile设置为true后,它成功了。

我的问题是为什么会发生这种事?是有问题的文件还是预编译任务无法编译的文件?

有一个特定的css文件(仅适用于IE),我以这种方式包括:

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

这是一个404错误。所有其他文件都使用assets/stylesheets/application.css.

包含

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

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

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

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

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

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

如果您缺少一个样式表,比如ie.css,而您没有通过资产管道提供它,您可以指定一个到它的绝对路径,以防止资产助手从/assets:中为它提供服务

<%= stylesheet_link_tag '/stylesheets/ie' %>

最新更新