1

我正在运行 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在生产中没有找到指纹版本,即使所有证据都表明资源是预编译的?

4

2 回答 2

0

您必须将文件名添加到预编译数组中,以告诉 Rails 您想在生产中使用它。这是在 production.rb 中:

config.assets.precompile += %w(cupertino.css)
于 2012-06-15T20:26:01.047 回答
0

所以,这里是缺少的魔法。根据 Richard Hulse 的建议,我转到清单文件application.css,并添加以下行:

 *= require cupertino

wola!,cupertino 是预编译的:

$ ls -c1 ./public/assets/cupertino*
./public/assets/cupertino-3235459a735b4f142b96270d04b2626e.css
./public/assets/cupertino-3235459a735b4f142b96270d04b2626e.css.gz
./public/assets/cupertino.css
./public/assets/cupertino.css.gz

部署我的 webapp 后,该指令在生产和开发环境中都能正常工作:

<%= stylesheet_link_tag "cupertino" %>
于 2012-06-17T23:57:29.580 回答