asset_host和相对协议URL更改为http

时间:2014-01-16 11:20:46

标签: ruby-on-rails ruby-on-rails-4 asset-pipeline

我的应用程序的某些元素(Rails 4.0.0)可通过http://和https://连接获得,因此我已将asset_host配置为使用相对协议url(//),这应该允许浏览器切换到它希望从中获取资产的协议。

config.action_controller.asset_host = "//assets%d.mydomain.com"

这几乎在我的所有应用程序中都能很好地工作,但是我有一个特殊的情况,即Rails似乎使用http://输出主机而不是相对协议网址//.

这似乎只发生在我的生产环境中,并且仅在我的LESS / CSS文件中引用资源时,而不是在使用stylesheet_link_tag包含文件时。

我在视图中按如下方式引用我的SASS文件:

<%= stylesheet_link_tag "public/application", :media => "all" %>

在我的SASS中,我引用了如下字体:

@font-face {
    font-family: 'OpenSansLight';
    src: font-url('opensans/OpenSans-Light-webfont.eot');
    ...

包含已编译CSS的链接标记使用我的良好相关协议URL按预期显示:

 <link href="//assets0.mydomain.com/assets/public/application-2c651fbc049aa23457c551d71e475420.css" media="all" rel="stylesheet" />

但是,对于字体的引用已从相关协议URL更改为已编译CSS中的http&gt;

@font-face {
    font-family:'OpenSansLight';
    src:url(http://assets0.mydomain.com/assets/opensans/OpenSans-Light-webfont-7f46c9d03142a572bb5969aa55dc54de.eot)

这会在浏览器中导致不安全的内容警告,导致IE根本不加载字体,以及Chrome和FF之类的警告会向用户显示警告。

我想不出有关为什么会发生这种情况的任何解释。任何建议都会被大大接受。

1 个答案:

答案 0 :(得分:3)

经过大量时间挖掘后,O.k似乎在某些时候我的资产编译在部署过程中失败了,遗留了一个旧版本的资产,用http值进行了硬编码。

结果是提供了这个而不是包含我的相对协议URL的那个。

在强制资产重新编译并确保它们成功完成后,事情就像我期望的那样出现。