如何使用svg'使用'使用Rails sprockets资产助手的声明?

时间:2015-12-14 18:46:52

标签: ruby-on-rails svg sprockets

我在外部文件中有一个svg,我想用Rails中的use语句引用它。

如果我这样做:

%svg
  %use{"xlink:href" => "assets/icon.svg#test"}

生成html:

<svg>
  <use xlink:href="assets/icon.svg#test"></use>
</svg>

一切都按预期工作。

但是我希望能够以与image_tag工作方式类似的方式使用链接资产版本控制。

我试着这样做:

%svg
  %use{"xlink:href" => image_url("icon.svg#test")}

这会生成html:

<svg>
  <use xlink:href="http://0.0.0.0:5000/assets/icon.svg#test"></use>
</svg>

资产肯定存在于http://0.0.0.0:5000/assets/icon.svg,但图标未显示。

我做错了什么?如何将sprockets资产助手与svg use语句一起使用?

3 个答案:

答案 0 :(得分:0)

资产不能存在于0.0.0.0,它不是真正的IP,你需要设置config.action_controller.asset_host

在开发127.0.0.1(loopback ip)中会做

答案 1 :(得分:0)

似乎是一个跨域浏览器安全问题。

Google Chrome实际上会给出一条有助于此的消息。 (我以前使用的是Firefox,所以没注意到这一点......)

不安全尝试从包含网址http://0.0.0.0:5000/assets/icon.svg的网址加载网址http://localhost:5000/。域,协议和端口必须匹配。

域名非常适合工作。

答案 2 :(得分:0)

在我看来,可以使用 image_path 代替image_url来解决此问题。这样你就可以获得一个相对于SVG文件的相对链接,即与原始HTML中的输出完全相同,可能只是将资产哈希添加到文件名中。