我对铁杆很新,很抱歉,如果这是一个愚蠢的问题。我构建了一个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包含所有其他文件。
答案 0 :(得分:3)
问题是您的文件名为ie
(而不是application
)。默认情况下,Rails仅编译application.js
和application.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