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

3
我对rails非常陌生,如果我的问题比较愚蠢请见谅。我构建了一个Rails 3.2应用程序,并准备在生产环境中部署。我运行了rake assets:precompile,它花费了一段时间并在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个回答

3
问题在于你的文件名为ie(而不是application)。默认情况下,Rails只编译application.jsapplication.css
通过将config.assets.compile设置为true,你启用了资源管道的回退功能,这样就准备好了你的ie.css文件。
要将ie.css样式表包含到编译过程中,你需要像这样添加它:
config.assets.precompile += %w(ie.css)

非常感谢您的回复。我按照您的要求做了,但是在将precompile设置为false时,我仍然无法正常运行应用程序。Rails是否提供有关哪个文件出错的任何信息? - Fernando
通常情况下,如果发生任何错误,rake assets:precompile 将停止运行,因此我敢打赌这仍然是一个配置问题。 - Daniel Rikowski

0
在生产环境中,Rails 期望您预编译资产而不是动态提供它们。
您需要运行 rake assets:precompile,Rails 将构建支持您的应用程序所需的静态资产。这通常涉及将您的 SASS 和 CoffeeScript 转换为压缩的 CSS 和 JavaScript。这可以防止在每个请求上编译脚本/样式表的成本,这是您不希望在生产环境中发生的事情。
如果您缺少单个样式表,例如您没有通过资产管道提供的 ie.css,则可以指定其绝对路径以防止资产助手从 /assets 中提供它:
<%= stylesheet_link_tag '/stylesheets/ie' %>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接