如何将image_tag与远程URL一起使用?

时间:2012-07-30 17:41:33

标签: ruby-on-rails paperclip

我有一个rake任务,它将我从API缓存的图像上传到我的S3存储桶。在我看来,我尝试输出图像,但它似乎不起作用。我想要做的是将图像缓存到我的文件系统,将它们发送到S3,我想使用我的S3存储桶而不是文件系统中的图像位置。我的代码如下所示:

在我的rails控制台中,我这样做只是为了查看图片网址:

1.9.3p125 :002 > a.image
 => http:://s3-eu-west-1.amazonaws.com/ramen-hut/pictures/1.jpg?1343645629 
1.9.3p125 :003 > 

我在我的应用中使用Paperclip,是否应该将网址添加为“http :: //”?看起来很奇怪。我的index.html.erb中的代码如下所示:

<li>
  <%= movie.title %>
  <%= image_tag movie.image.url %>
</li>

但这导致以下html:

<li>
  Cowboy Bebop
  <img alt="1" src="/assets/http:://s3-eu-west-1.amazonaws.com/ramen-hut/pictures/1.jpg?1343645629">
</li>

为什么在我的网址之前包含'/ assets'/?

我按照教程配置Paperclip为我的欧洲S3 Bucket设置图像网址。所以在我的环境中.rb,我有这个:

#Signature correction for Paperclip and AWS
AWS::S3::DEFAULT_HOST = "s3-eu-west-1.amazonaws.com"

我的初始化程序目录中有一个aws-signature.rb文件,其中包含以下代码:

#Makes Paperclip use the correct URL for images
Paperclip.interpolates(:s3_eu_url) { |attachment, style|
  "#{attachment.s3_protocol}://s3-eu-west-1.amazonaws.com/#{attachment.bucket_name}/#{attachment.path(style).gsub(%r{^/}, "")}"
}

1 个答案:

答案 0 :(得分:2)

网址存在问题:http:://而不是http://,因此image_tag不知道它是绝对网址。

如何生成这些网址?宝石还是你自己的代码?