我正在运行 Rails 3.2。我已经集成了 ThemeRoller 画廊 (http://jqueryui.com/themeroller/) 中的“cupertino”主题。由于 Rails 3.2 中尚不支持可变主题,我只是将 cupertino 图像复制到./app/assets/images/images
,并将 cupertino CSS 样式表放入./app/assets/stylesheets/cupertino.css.scss
.
我没有向 application.css 添加任何内容。我的理解是资产管道将简单地预编译位于./app/assets/stylesheets
. 到现在为止还挺好。在application.rb
中,我将正确的属性设置为 true:
config.assets.enabled = true
这就是事情变得有趣的地方。例如,如果我弹出 jQuery 日期选择器,我不会得到 Cupertino 主题!行。这很容易处理。我只是明确声明了一个指向 cupertino 样式的链接:
<%= stylesheet_link_tag "cupertino" %>
对于我的开发环境,这行得通!我再次举起 jQuery datepicker,cupertino 主题出现了!如果我打开 HTML 视图,您可以看到选择 Cupertino 样式的相应链接指令:
<link href="/assets/cupertino.css" media="screen" rel="stylesheet" type="text/css" />
在我的生产环境中,stylesheet_link_tag
不起作用!我相信这是因为资产是在生产环境中预编译的,而 Rails 无法找到 cupertino.css 的“键控”版本。也就是说,如果stylesheet_link_tag
工作正常,我会期待这样的事情:
<link href="/assets/cupertino-40e24d89d5768c02a1373032957ebd02.css" media="all" rel="stylesheet" type="text/css" />
所以,然后我会查看我预编译资产的生产日志。你猜怎么了?库比蒂诺是预编译的!
$ tail -100 log/production.log
...
Compiled cupertino.css (729ms) (pid 5325)
...
我<%= stylesheet_link_tag "cupertino" %>
用一个显式链接指令替换该指令,该指令加载库比蒂诺样式表的未键入版本:
<link href="/assets/cupertino.css" media="screen" rel="stylesheet" type="text/css" />
这样可行!在开发和生产上。但谜团愈演愈烈。在生产中,我打开 的键控版本applications.css
,即所有预编译的样式。我搜索cupertino
. 你猜怎么了?库比蒂诺风格是预编译的;这是我从压缩的预编译资源中解开的一种风格:
.ui-icon {
width:16px;
height:16px;
background-image:url("/assets/jquery-ui/cupertino/ui-icons_72a7cf_256x240-cd87f27304052bb2d63abd3680bb2bbd.png")
}
我们立即看到一个与路径相关的问题。根据我看到的其他评论,这并不奇怪。我将图像从 移动./app/assets/images/images
到./app/assets/images/jquery-ui/cupertino
. 同样的问题再次出现。相同的分辨率解决了问题。
问题:为什么cupertino.css
在生产中没有找到指纹版本,即使所有证据都表明资源是预编译的?