fog.io gem public_url返回两个不同的url

时间:2012-12-21 18:34:31

标签: ruby-on-rails ruby delayed-job fog

所以这是我的代码。看起来像典型的雾代码。

prefix = 'data:image/png;base64,'
png = Base64.decode64(data[prefix.length, data.length-1])

aws_settings = YAML.load_file(RAILS_ROOT + "/config/amazon_s3.yml")[RAILS_ENV] rescue nil
if aws_settings
  connection = Fog::Storage.new(
    :provider => 'AWS',
    :aws_access_key_id => aws_settings['access_key_id'],
    :aws_secret_access_key => aws_settings['secret_access_key']
  )

  directory = connection.directories.get(aws_settings['bucket_name'])

  filename = "#{quiz_id}/#{user_id}_#{question_id}.png"
  file = directory.files.create(
    :key => filename,
    :body => png,
    :public => true
  )
end
问题是,当我调用file.public_url时,我将随机获取两个不同的网址之一。要么我会得到:

https://bucket_name.s3.amazonaws.com/19/235_146.png

http://s3.amazonaws.com/bucket_name/19/235_150.png

虽然我不关心这种或那种方式,但我希望网址保持一致。

有谁知道如何解决这个问题?我在代码中做错了吗?

我还应该提到我在Delayed :: Job中做这个。当我这样做作为普通的方法调用时,似乎总是给我https版本。但是,当我把它变成延迟工作时,就是当我得到随机性时。很奇怪。

1 个答案:

答案 0 :(得分:1)

哇,这有点令人尴尬......这已成为关于延迟工作的教训。显然它已经缓存了我的旧代码,我在那里硬编码url字符串来存储它。像这样: url =“http://s3.amazonaws.com/bucket_name/{quiz_id}/{user_id}_{question_id}.png”

我后来改为: url = file.public_url

如果您的存储桶名称不符合dns,则雾默认为该字符串。这就是为什么我很困惑为什么会发生这种情况。所以是的,只是旧的缓存代码被使用。我关闭了延迟的工作并重新开始工作,问题就消失了。

我能够弄清楚的是我正在查看延迟的工作日志,并注意到它仍然有一些旧的put语句在那里打印。那是它点击的时候。 :