4

簡単な作業だと思ったことをしたい:

  • 次のコントロールを含むフォームを用意します。
    • 1ファイルのファイルアップロード
    • このファイルを抽出するかどうかのチェックボックス
    • リンク先のファイルを指定するテキスト入力 (チェックボックスがオンの場合にのみ必要) -index_file
  • フォーム送信後:
    • チェックボックスがチェックされていない場合は、CarrierWave 経由で S3 の指定された場所にファイルをアップロードします。store_dir
    • チェックボックスオンになっている場合は、アーカイブからすべてのファイルを抽出し (ZIP アーカイブのみを想定しています。ディレクトリ構造を維持する必要があります)、抽出したファイルを指定した場所にアップロードし、データベース内store_dirに設定index_fileします (データベースに何も保存する必要はありません)。その他の解凍ファイルについて)

私が発見したように、Heroku の制限により、これは簡単な作業ではありません。これらのファイルはサイズが大きい (数百 MiB または数 GiB) ため、可能であれば S3 からこのファイルを再ダウンロードしたくありません。

Delayed Job または Resque を使用するとうまくいくと思いますが、その方法と問題の最善の解決策は正確にはわかりません。

できるだけ少ないリソースを使用してそれを解決する方法を知っている人はいますか? Heroku で変更できない場合は、CarrierWave を別のアップローダー (Paperclip など) とホスティング プロバイダーに変更できます。

CloudFlare を使用することも考えていましたが、これでも問題なく動作しますか?

回答ありがとうございます。

4

1 に答える 1

1

この heroku support emailに基づくと、/tmp ディレクトリのサイズは何ギガにも及ぶようです。自分でクリーンアップするだけでよいので、プラットフォームとしての Heroku は問題ではありません。

いくつかの記事が問題の解決に役立つ場合があります。

  1. https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Make-Carrierwave-work-on-Heroku - /tmp ディレクトリを CarrierWave のキャッシュ ディレクトリとして使用するようにアプリを構成する方法を説明しています。次の行に注意してください。

    use Rack::Static, :urls => ['/carrierwave'], :root => 'tmp' # この行を追加

    これは、/tmp ディレクトリから /carrierwave/xzy を提供するようにラックに指示します (イメージを一時的に保存するのに役立ちます)。

  2. 次に、uploader.cache を使用します。メソッドを使用すると、インバウンドのアップロード ファイルを意図的にキャッシュできます。保存したら、uploader.storeを呼び出すかどうかを確認できます。コンテンツを S3 にプロモートするメソッド(S3 を CarrierWave のストアとして構成したと仮定します。
于 2012-08-15T02:02:22.403 に答える