繁体   English   中英

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

[英]fog.io gem public_url returns two different urls

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

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时,我会随机获得两个不同的URL之一。 我将得到:

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

要么

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

虽然我不在乎任何一种方式,但我希望URL保持一致。

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

我还应该提到我是在Delayed :: Job内部执行此操作的。 当我将其作为常规方法调用时,似乎总是给我https版本。 但是,当我将其放入“延迟工作”时,便是获得随机性的时候。 很奇怪。

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

后来我将其更改为:url = file.public_url

如果您的存储桶名称不符合dns,Fog会默认使用该字符串。 这就是为什么我如此困惑的原因。 是的,只是正在使用的旧缓存代码。 我关闭了延迟的工作,然后重新开始备份,问题解决了。

我能弄清楚的方法是,我正在查看延迟的作业日志,发现那里仍然有一些旧的puts语句被打印出来。 那是当它单击。 :]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM