簡體   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