【问题标题】:asset_host and relative protocol URLs being changed to httpasset_host 和相关协议 URL 被更改为 http
【发布时间】:2014-01-16 11:20:45
【问题描述】:

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

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

这在我几乎所有的应用程序中都非常有效,但是我有一个特殊的情况,Rails 似乎使用 http:// 而不是相对协议 url // 输出主机。

这似乎只发生在我的生产环境中,并且仅在从我的 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');
    ...

使用我漂亮的相对协议 URL,包含已编译 CSS 的链接标记看起来与预期一样:

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

但是,在编译的 CSS 中,对字体的引用已从相对协议 URL 更改为 http>

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

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

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

【问题讨论】:

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


    【解决方案1】:

    好吧,经过很长时间的挖掘,似乎在某些时候我的资产编译在部署过程中失败了,留下了旧版本的资产,它是用 http 值硬编码的。

    因此,它被提供,而不是包含我的相对协议 URL 的那个。

    在强制资产重新编译并确保它们成功编译后,事情看起来如我所料。

    【讨论】:

    • 听起来很疯狂,我遇到了完全相同的问题和解决方案。感谢您为我节省了大量时间!
    • 这里的原因相同。如果没有更改资产文件,我有一个 Capistrano 任务跳过资产编译。由于未将启用相对网址检测为相关更改,因此我的资产从未更新。
    猜你喜欢
    • 2020-05-08
    • 2011-10-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 2019-02-04
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多