我对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.js
和application.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' %>