1

だからここに私のコードがあります。典型的な霧のコードのように見えます。

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 を呼び出すと、2 つの異なる 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 バージョンが表示されるようです。しかし、それを Delayed Job に貼り付けると、ランダム性が得られます。非常に奇妙な。

4

1 に答える 1

1

うわー、これはちょっと恥ずかしい..これは、遅延ジョブについてのレッスンに変わりました。どうやら、URL文字列をハードコーディングして保存していた古いコードをキャッシュしていたようです。このように: url = "http://s3.amazonaws.com/bucket_name/{quiz_id}/{user_id}_{question_id}.png"

後でこれに変更しました: url = file.public_url

バケット名が dns に準拠していない場合、フォグはデフォルトでその文字列を使用します。だからこそ、どうしてこうなったんだろうと戸惑いました。ええ、使用されていた古いキャッシュ コードです。遅延したジョブをシャットダウンし、再び開始したところ、問題はなくなりました。

私がそれを理解することができたのは、遅延ジョブのログを見ていて、古い puts ステートメントがまだそこに出力されていることに気づいたからです。それがクリックされたときです。:]

于 2012-12-22T14:11:51.270 に答える