私はRailsを使い慣れていないので、デフォルトパス(/ system /:attachment /:id /:style /:filename)を4つの異なるモデル。今、私は自分のフォルダに古いデータを失うことなく各モデルを移動したいと思います。Rails 3 + Paperclip:現在のデータを別のフォルダに移動
これを適切に処理する方法は何ですか? Paperclipは古いフォルダから自動的にデータを移行するオプションを提供していますか?
ありがとうございました。
私はRailsを使い慣れていないので、デフォルトパス(/ system /:attachment /:id /:style /:filename)を4つの異なるモデル。今、私は自分のフォルダに古いデータを失うことなく各モデルを移動したいと思います。Rails 3 + Paperclip:現在のデータを別のフォルダに移動
これを適切に処理する方法は何ですか? Paperclipは古いフォルダから自動的にデータを移行するオプションを提供していますか?
ありがとうございました。
私はこのために小さなレーキタスクを作成しました。あなたがモデルと呼ばれるユーザーを持っているし、あなたのイメージファイルは、「画像」と呼ばれていると仮定すると、すくいchange_users_folderを実行して、待って、LIB /タスク/ change_users_folder.rb
desc "Change users folder"
task :change_users_folder => :environment do
@users = User.find :all
@users.each do |user|
unless user.image_file_name.blank?
filename = Rails.root.join('public', 'system', 'images', user.id.to_s, 'original', user.image_file_name)
if File.exists? filename
user.image = File.new filename
user.save
end
end
end
end
それらを次のコードを配置します。
古いファイルは削除されません。それらは元の場所に保持され、新しいフォルダにコピーが作成されます。すべてがうまくいったら、後で削除することができます。
そして、私の将来のコードのために、私は確信して私は常にセットになります:パスと:ペーパークリップを使用している場合、URLを:)
私は同様のジレンマを持っていました。私たちはすべての添付ファイルを特定のパスに格納していましたが、ビジネス要件が変更され、すべてを移動して再構成する必要がありました。
私は、ペーパークリップのパスを変更したり、ファイルを移動したりする際に、少しの情報がどれほどあるのか驚いています。たぶん私は明白なことを見逃している?
Fernandoのように、私はレーキタスクを書く必要がありました。ここで(添付モデルが添付ファイル、および実際のペーパークリップです::添付ファイルオブジェクトは次のとおりです。ファイル)私のコードは次のようになります。
task :move_attachments_to_institution_folders => :environment do
attachments = Attachment.all
puts "== FOUND #{attachments.size} ATTACHMENTS =="
old_path_interpolation = APP_CONFIG[ 'paperclip_attachment_root' ] + "/:id_partition.:extension"
new_path_interpolation = APP_CONFIG[ 'paperclip_attachment_root' ] + "/:institution/reports/:id_:filename"
attachments.each do |attachment|
# the interpolate method of paperclip takes the symbol variables and evaluates them to proper path segments.
old_file_path = Paperclip::Interpolations.interpolate(old_path_interpolation, attachment.file, attachment.file.default_style) #see paperclip docs
puts "== Current file path: #{old_file_path}"
new_file_path = Paperclip::Interpolations.interpolate(new_path_interpolation, attachment.file, attachment.file.default_style)
if File.exists?(old_file_path)
if !File.exists?(new_file_path) #don't overwrite
FileUtils.mkdir_p(File.dirname(new_file_path)) #create folder if it doesn't exist
FileUtils.cp(old_file_path, new_file_path)
puts "==== File copied (^_^)"
else
puts "==== File already exists in new location."
end
else
puts "==== ! Real File Not Found ! "
end
end
私にとって重要なことは、そのデフォルトを使用してクリップを再計算し、古いパスを持っていることでした補間。それ以来、標準のFileUtilsを使用してファイルをコピーするだけでした。コピーは名前の変更を処理します。
P.S. 私はレール上にあります。2.3.8ブランチ、paperclip -v 2.8.0
モデルのIDに基づいて手動でファイルを移動するためのスクリプトを作成する必要があるようです。 –