2017-10-26 4 views
1

写真のクリップを使用するアイテム(サンプルデータではなく実際のシードデータ)には、多くのシードデータがあります。私たちはペーパークリップと共にS3を使用するように設定されています。私たちの種子をロードするcommonly suggested wayはすでに非常に遅いです、そして、我々は約1トンのアイテムを追加しようとしています。種子はすでに5分ほどかかっているので、これはおそらく標準的なgitブランチングスタイルのワークフローを実用的ではないものにします。私たちはS3を開発モードにすることができましたが、可能であればの近くにdevelopmentの環境を維持します。S3のペーパーシップシードのスピードアップ

私は毎回アップロードプロセスを経ずにS3リンクを再利用できる方法があるかどうかを調べるためにペーパークリップのドキュメントを見てきましたが、何も見つかりませんでした。これを解決するための「標準的な」または友好的な方法がありますか? Paperclip/S3を使って大量のシードファイルをどのように解決しましたか?

ありがとうございました!

答えて

1

私が間違っていない場合、ペーパークリップはイメージのファイル名をデータベースの列に保存するだけです。そのような場合は、「一般的に推奨される方法」を使用して、データベースを一度シードできます。 Paper ClipがデータベースをシードしてS3にデータをアップロードすると、データベースにファイル名、ファイルサイズ、およびその他のファイルメタデータを問い合わせることができます。

データベースの既存のデータを使用して新しいシードファイルを生成し、レコード値を直接割り当てることができます(つまり、Paperclipを活用しない)。

Paperclipを処理せずに新しいレコードを作成できるようにするには、this exampleに従うことをおすすめします。お使いのモデルに以下を追加します。

attr_accessor :skip_image_processing 

before_asset_post_process :skip_image_processing? 

def skip_image_processing? 
    self.skip_image_processing 
end 

あなたもこのようなものを使用して自動的にこの第二シードファイルを生成することができる場合があります

@images_we_want_to_seed.each do |img| 
    puts "Image.create(" 
    puts " skip_image_processing: true, 
    puts " asset_file_name: img.asset_file_name, 
    puts " asset_file_size: img.asset_file_size, 
    puts " asset_content_type: image.asset_content_type, 
    .... 
    puts ")" 
    puts " " 
end 

私がテストしていませんが、これは動作するはずです。

+0

'before _ * _ post_process'を使用していただきありがとうございます。残念ながら、ファイルがS3にアップロードされるのを防ぐわけではありません。画像処理(私たちは使用しません)のみです。 さらに、Paperclipはファイル名をデータベースに格納しますが、S3がファイルに与える一意のIDは格納しません。データベースでは、それは 'Something.jpg'ですが、S3では' Something.jpg?1509052552'です。残念ながら、データベースからシードを取り出してデータベースを復元することはできません。 – brainbag

関連する問題