2012-10-28 4 views
5

私は搬送波、レール、およびamazon s3を使用しています。私は、画像を保存するたびに、画像はS3に表示し、私はこのような名前を持つ管理コンソールでそれを見ることができます:amazon 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を一致させることはできますか? carrierwaveやそれには何かオプションがありますか?

答えて

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/はどちらも問題なく動作します。

3

デフォルトでCarrierWaveにはURLは保存されません。代わりに、必要なときに毎回生成します。

Time.now.to_iのため、filenameが呼び出されるたびに、別の値が返されます。

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

+0

私はそれが保存されていないヒントを感謝します。私はちょうどそれを保存する必要があった – AJcodez

関連する問題