【发布时间】:2013-11-05 15:02:43
【问题描述】:
我正在使用 Ruby on Rails 4 开发一个网站,但遇到一些 CSS 文件的路径问题。
我的applicaiton.sass 文件中未包含以下资产:
- mobile.scss
- mozilla.scss
- msie.scss
- opera.scss
- webkit.scss
我已将它们包含在我的 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/ 目录中。它们也在public/assets/ 目录中的manifest.json 文件中正确列出。
当我在浏览器中加载网站并查看源代码时,我注意到浏览器特定的 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 路径不应该正确输出还是我缺少什么?任何帮助将不胜感激。
【问题讨论】:
-
当 Rails 打印出
/stylesheets/webkit.css这样的路径时,这意味着它无法找到该资产的预编译版本。 -
知道为什么在成功创建它并且它位于
public/assets/文件夹中时找不到它吗? -
你找到解决办法了吗?
-
很遗憾,我没有时间做太多的挖掘工作。
-
我遇到了同样的问题,但正如 Rails 指南中所指定的,您需要在预编译数组中包含任何其他清单文件。 config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']
标签: css ruby-on-rails ruby-on-rails-4 asset-pipeline