我正在使用Ruby on Rails 4开发一个站点,并且遇到了一些CSS文件路径的问题。
我有以下资产未包含在我的applicaiton.sass
文件中:
我已将它们包含在我的application.rb
中,并使用以下内容进行预编译:
config.assets.precompile += [
'mobile.css',
'mozilla.css',
'msie.css',
'opera.css',
'webkit.css'
]
在我的生产服务器上,我运行了以下命令(注意:touch
命令是为了确保应用程序重新启动并清除缓存,因为我使用Phusion Passenger和Nginx作为我的服务器):
rake assets:precompile RAILS_ENV=production
touch tmp/restart.txt
运行上述命令后,我注意到资产已预先编译并驻留在我的public/assets/
目录中。它们也正确列在manifest.json
目录中的public/assets/
文件中。
当我在浏览器中加载网站并查看源代码时,我注意到浏览器特定的CSS文件没有使用正确的资产路径。它显示:
<link href="/assets/application-ec1031f251a585c79d4404ef2899f6d1.css" media="screen" rel="stylesheet" />
<link href="/stylesheets/webkit.css" media="screen" rel="stylesheet" />
虽然我希望看到:
<link href="/assets/application-ec1031f251a585c79d4404ef2899f6d1.css" media="screen" rel="stylesheet" />
<link href="/assets/webkit-70899fec75bb8eae24edae491a94f73a.css" media="screen" rel="stylesheet" />
我的视图看起来使用以下代码:
<% if @mobile %>
<%= stylesheet_link_tag :mobile %>
<% else %>
<%= stylesheet_link_tag :application %>
<%= stylesheet_link_tag :msie if @browser == 'Internet Explorer' %>
<%= stylesheet_link_tag :opera if @browser == 'Opera' %>
<%= stylesheet_link_tag :mozilla if @browser == 'Mozilla' %>
<%= stylesheet_link_tag :webkit if @browser == 'Webkit' %>
<% end %>
我的问题是,webkit.css
路径不应该正确输出,还是我缺少某些东西?任何帮助将不胜感激。
答案 0 :(得分:1)
在生产模式下预编译资产时(假设您遵循the Rails asset pipeline guide,app/assets
下的所有资产都将编译为application.css
。因此,此处列出的所有文件都已在{ {1}}:
application.css
这是推荐的方法,因为一个较大的文件比几个较小的文件加载速度更快,因为HTTP请求和响应通常是应用程序进程中最慢的部分。
如果您绝对需要根据代码的浏览器类型有条件地包含样式表,您可以:
config.assets.precompile += [
'mobile.css',
'mozilla.css',
'msie.css',
'opera.css',
'webkit.css'
]
中的资产管道清单中删除它们,并将CSS文件保留在application.css
目录中,然后像上面那样包含它们。app/assets/stylesheets
文件中并且可以单独加载请记住,这些选项中的任何一个都会破坏资产管道的主要意图之一。
答案 1 :(得分:0)
很抱歉,如果我有点太明显了,但是你在生产中说过.rb:
config.serve_static_assets = true