5

搬送波、レール、Amazon s3 を使用しています。イメージを保存するたびに、イメージが s3 に表示され、管理コンソールで次のような名前で表示されます。

https://s3.amazonaws.com/bucket-name/ uploads/images/10/888fdcfdd6f0eeea_1351389576.png

ただし、モデルでは、名前は次のとおりです。

https://bucket-name.s3.amazonaws.com/ uploads/images/10/b3ca26c2baa3b857_1351389576.png

まず、なぜランダムな名前が違うのですか? アップローダで次のように生成しています。

def filename
  if original_filename
    "#{SecureRandom::hex(8)}_#{Time.now.to_i}#{File.extname(original_filename).downcase}"
  end
end

モデル内の間違った URL が一貫して保存されているため、呼び出しごとにランダムな文字列が生成されないことはわかっています。プロセスのどこかで、イメージ名が保存されて amazon s3 に送信された後、モデルに保存するために新しいイメージが生成される必要があります。変。

また、正規表現を使用せずに、bucket.s3 の代わりに s3/bucket に関して URL を一致させることはできますか? キャリアウェーブなどにオプションはありますか?

4

2 に答える 2

3

CarrierWave はデフォルトで URL を保存しません。代わりに、必要になるたびに生成されます。

したがって、 が呼び出されるたびfilenameに異なる値が返されますTime.now.to_i

代わりに列を使用するcreated_atか、ランダム ID または完全なファイル名を格納するための新しい列を追加してください。

于 2012-10-30T07:12:20.503 に答える
2

それがまだ元のファイル名である場合は、ファイル名を保存することで解決しました。アップローダーに次のように入力します。

def filename
  if original_filename && original_filename == @filename
    @filename = "#{any_string}#{File.extname(original_filename).downcase}"
  else
    @filename
  end
end

sumbdomainとパスの問題は実際には問題ではありません。サブドメインで動作します。つまりhttps://s3.amazonaws.com/bucket-name/https://bucket-name.s3.amazonaws.com/両方とも正常に動作します。

于 2012-10-31T01:58:49.370 に答える