Rails:使用资产管道哈希URL创建og:image

时间:2016-11-30 11:42:43

标签: ruby-on-rails image heroku asset-pipeline opengraph

因为我遇到Hootsuite在Amazon S3上检索图像存储的问题,我想通过og:image标签添加“后备”图像。 (让我们在这里忽略S3问题,那是另一天。) 图像存储在我的Heroku本地和没有指定图像的文章中,我成功地使用它如下:

<%= image_tag "fallback/my-fallback-image.jpg" %>

出于某种原因,Hootsuite的算法对此仍然太愚蠢,因此我想添加og:image

应用程序布局检索标记,如下所示:

<%= yield :og_image %>

我添加了一个这样的帮手:

def og_image(url)
    content_for(:og_image, tag(:meta, :property => "og:image", :content => url)) if url
end

在视图中,我添加了如下图像:

<%= provide(:og_image, og_image(image_url("/fallback/my-fallback-image.jpg"))) %>

在制作中,虽然image_tag(如上所示)工作正常且包含哈希,但og:image标记最终会像这样:

<meta property="og:image" content="http://www.example.com/images/%2Ffallback%2Fmy-fallback-image.jpg" />

因此,它不仅会破坏斜杠,还会忘记哈希值。

我在使用Heroku时受到限制,并希望坚持使用资产管道。我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试没有路径中的斜线。添加它时,rails假定您需要绝对路径。

image_url("fallback/my-fallback-image.jpg")

答案 1 :(得分:0)

好的,我明白了。 url_to_image使用哈希提供正确的完整网址:

provide(:og_image, og_image(url_to_image("fallback/my-fallback-image.jpg")))

我现在可以直接在Facebook上发布时选择特定的文章图像后备图像,因此我猜测og:image属性按预期工作。不幸的是,Hootsuite算法仍然失败。也许我会尝试另外一个社交媒体服务。