CarrierWave
フォルダー構造の再編成を使用して、S3 バケット内でファイルを移動しようとしています。
クラスのすべての画像が というフォルダーにアップロードされている既存の Rails アプリケーションにたどり着きました/uploads
。これにより、2 人のユーザーが同じファイル名で異なる画像をアップロードすると、2 番目の画像が最初の画像を上書きするという問題が発生しています。ActiveRecord
これを解決するには、フォルダーを再編成して、オブジェクト インスタンスに従って各画像を独自のディレクトリに配置します。CarrierWave
ファイルのアップロードを管理するために使用しています。
古いアップローダ コードには次のメソッドがありました。
def store_dir
"uploads"
end
新しいファイル ストレージ スキームを反映するようにメソッドを変更しました。
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
これは新しい画像にはうまく機能しますが、古い画像の URL は機能しません。モデルを変更するとすぐに、既存の画像の URL が新しいフォルダー内にあると報告されますが、画像ファイルはまだ に保存されてい/uploads
ます。
> object.logo.store_dir
=> "uploads/object/logo/133"
これは正しくありません。このオブジェクトは、そのロゴを で報告する必要があり/uploads
ます。
私の解決策は、画像ファイルを移動するスクリプトを作成することですが、CarrierWave でファイルを移動するための正しい方法が見つかりませんでした。私のスクリプトは次のようになります。
MyClass.all.each |image|
filename = file.name #This method exists in my uploader, returns the file name
#Move the file from "/uploads" to "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
ファイルを新しい場所に移動するには、スクリプトの 3 行目で何をすればよいですか?