2016-11-13 1 views
0

私はHerokuが長期間のファイルストレージを持っていないことを発見したので、S3などに移行する必要があります。私の周りの頭を掴むためにたくさんの新しいものがありますので、CarrierWave-directを使ってS3に直接アップロードしてからdelayed_jobで処理する方法が私のRailsアプリケーションでうまくいくはずです。私はこれを正しくコーディングする場合にどうすべきだと思う何Rails、Amazon S3ストレージ、CarrierWave-Direct、delayed_job - これは正しいのですか?

は以下の通りです:

  1. 私は私が必要とするものなど、S3のアカウントにサインアップセットアップ私のバケット(複数可)および認証の詳細を取得しますに(適切に私のユーザーから隠さ)
  2. 私は直接アップロードホワイトリストは、私のアップロード(以降のダウンロード)を防止することから、クロスドメインを停止しないことを確認してください
  3. 私はCarrierWave & CarrierWave-direct(または類似)を使用中のプログラムにアップロード中に自分のアプリを読み込まないように自分のアップロードを作成する
  4. S3はランダムアクセス( 'ファイル名')情報を作成するので、複数のユーザーが同じ名前のファイルを上書きしてファイルを上書きする心配はありません。私が元の名前を気にするなら、メタデータを使ってそれらを保存することができます。
  5. CarrierWave-directアップロード後にユーザーのブラウザを「アップロード完了」URLにリダイレクトします。ここから、delayed_jobまたはpopupを作成することができます。
  6. この時点で、ユーザーはジョブが試行され、他のものに移動することがわかります。
  7. 私のdelayed_jobタスクは、S3 APIを使用してファイルにアクセスし、完了したら入力ファイルを削除できます。
  8. delayed_jobが完了し、通常の方法でユーザーに通知します。 Eメール。

それは何ですか、それとも私は何か不足していますか?ありがとう。

答えて

0

あなたは必要なプロセスを十分に理解しています。複雑なレイヤーを1つ追加する---新しいものをActiveJobの新しいものにする必要があります。 ActiveJobは、あなたの選択したプロセッサ(あなたのケースでは、DelayedJobs)を経由して、レール内のバックグラウンド処理を行うだけです。その後、あなたはレールの発電機を経由してジョブを作成することができます。

bin/rails g job process_this_thing 

アクティブなジョブ数がジョブを処理する「道レール」...しかし、それはまた、より少ない手間でプロセッサを切り替えることができます提供しています。

したがって、キャリアウェーブアップローダを作成します(carrierwaveドキュメントを参照)。次に、そのアップローダをモデルに添付します。 carrierwave_directの場合、ファイルフィールドとモデルフォームの関連付けを解除し、ファイルフィールドを独自のフォームに移動する必要があります(carrierwave-directが提供するurlメソッドを使用してください)。

ファイルをアップロードしてから、レコードを保存することができます。または、レコードを保存し、ファイルを処理します。設定プロセスは、選択するプロセスによって大きく異なります。

Carrierwaveとcarrierwave-directは、carrierwaveイニシャライザに格納されたフォグクレデンシャルに基づいてファイルを保存する場所と、設定されている場合はupload_dirパスを使用してアップローダに保存します。

Carrierwaveは、バージョンなどを定義するアップローダを提供します。Carrierwave_direct機能はS3バケットに直接アップロードし、バックグラウンドでバージョンを処理します。Active Jobsは、DelayedJobsを介して、バックグラウンド処理を提供します。 Fogは、carrierwaveとS3バケットのリンクです。

booleanフラグをモデルに追加する必要があります。このフラグは、carrierwave_directが画像をアップロードしたときにtrueに設定され、ジョブの処理が終了するとfalseに設定されます。そうすれば、リンクが壊れているのではなく(ジョブが実行されていてまだ完了していない間に)、あなたのビューには「このことはまだ処理中です...」のようなものが表示されます。

RailsCastはこのタスクを完了するのに最適なリソースです。これをチェックしてください:https://www.youtube.com/watch?v=5MJ55_bu_jM

関連する問題