所以这是我的代码。看起来像典型的雾代码。
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
虽然我不在乎一种或另一种方式,但我希望网址保持一致。
有谁知道如何解决这个问题?我在我的代码中做错了吗?
我还应该提到,我是在 Delayed::Job 中执行此操作的。当我作为普通方法调用执行此操作时,它似乎总是给我 https 版本。但是当我把它坚持到延迟工作中时,我就会得到随机性。很奇怪。