2010-12-13 17 views
1

または私はこの間違ったことについて考えていますか?基本的には、モデルにZIPファイルをアップロードできるようにしたいのですが、アップロードした後に、一連のプロセスを実行したいと思います。バックエンド/コンソールからこれを行うことができ、また、フロントエンドインターフェイスを介してアクションをトリガする方法があることが良いでしょう。railsタスクをrailsインターフェイス経由で起動できますか?

ここでの考え方:アイテム

collection.zipは、私はバッチギャラリーをトリガーする各項目

のための情報を持っています

ギャラリーcollection.zip

ギャラリーは多くの子供を持っているがあります.items.buildプロセスは、zipから情報を抽出し、それを使用して新しい項目を作成します。私はPaperclip :: Processorをこの作業に使用することを考えましたが、それがどのように機能するかについては、本当に有用で包括的な文書をたくさん見つけていません。実験は欲求不満と混乱の原因となりました。この種の作業にレーキタスクを使用する人もいますが、実際にはコンソールを使用してタスクを実行する必要はなく、実際には "Generate Gallery"というボタンが表示されますすべての必要な作業。

これを行う方法はありますか?これは悪い習慣とみなされるだろうか?もしそうなら、私はこの問題に近づくはずです別の方法はありますか?

答えて

2

レール内からレーキタスクを起動できますが、zipファイルを解凍してクラスまたはモジュールで処理するロジックを作成します。次に、そのコードをどちらの場所でも使用できます。

+0

私はレールにrakeタスクを実行するようにした場合、どのようにそれは次のようになり実装された?それとも、ギャラリーモデルの中のメソッドとしてこれを書く方が良いでしょうか? –

+0

これを行うには、ギャラリーモデル内にメソッドを書く方がはるかに良いでしょう。レーキタスクをロードして呼び出すために必要なライブラリを必要とすることはできますが、すべてではありませんが、実際にはほとんどの場合適切な方法ではありません。レーキが造られたものではありません。 – idlefingers

4

delayed_jobまたはresqueはむしろrakeタスクを実行するよりも、バックグラウンド処理のためのベストプラクティスであると考えられています。両方の背後

中心的な考え:

  1. バッチスクリプトやコード、バックグラウンドで実行する必要がありますlibに保たれています。
  2. ジョブはシリアル化され、要求サイクル中にDB(またはサポートされている任意のパーシスタンスレイヤまたはキュー、たとえばRedisまたはStarling)に保存されます。
  3. バックグラウンドで動作するデーモンは、キュー内のジョブを探して、様々な順序(たとえば、優先順位やFIFOなど)でそれらを処理する
関連する問題