2016-05-31 9 views
0

私のプロジェクトでは、ユーザーがテキストファイルをアップロードしているので、そのファイルを読む必要があります。Rails - HTTPリクエストでコントローラインスタンスの変数データを保存する

ファイルは、任意のサイズにすることができます。使用しているファイルは1 MBで、〜1500行あります。ファイルも大きくすることができます。したがって、すべてをdbに入れるのではなく、ファイルを処理し、インスタンス変数にデータを保持することを考えました。

しかし、インスタンス変数はHTTPリクエストでは使用できません。 したがって、HTTP要求を介してインスタンス変数の値を保持するために使用できるオプションは何ですか.DBを選択しなかった他の理由は、データを永続化する必要はありませんでした。ユーザーがログインしている間は、その期間だけデータが存在する必要があります。ユーザーがログアウトすると、データを破棄できます。

詳細情報が必要な場合はお知らせください。

+0

あなたはhttps://rubygems.org/gems/request_storeを試しましたか? – imechemi

答えて

1

@xyiousがアドバイスしているように、私はセッション中に多くのデータを保存しないようにしていますが、それは良い方法ではありません。ただし、次の操作を実行できます。

  1. セットアップあなたは一時ファイルを保存するパスを保持し、システム全体の構成設定、この場合には、ユーザー
  2. によってアップロードされたファイルは、ランダムに生成する(多分)
  3. ファイル名
  4. にアクセスできる要求間で変更した場合でも、このランダムなファイル名をユーザーセッションに格納すると、このランダムなファイル名が格納されます(この場合、 SecureRandom.hexを使用してファイルをアップロードします)。
  5. 各リクエストで、データを処理する必要があるときはいつでも、ユーザーのセッションからファイル名を取り出して結合します#1の設定のパス、ファイルシステムからファイルを読み込み、必要に応じて処理を行います
  6. ログイン/セッションコントローラにコールバックを追加して、ユーザがログアウトしたときにファイル名を見つけて削除しますログアウトすると、未使用のファイルを保存しないでください
0

私はそれに反対しますが、データをセッション変数またはクッキーに格納することができます。
ユーザーがログインしている間に保存する必要があるのはなぜですか?重要なビットを保存することは可能ですか?

0

アップロードするファイルのサイズに制限がないため、コンテンツを格納するためにインスタンス変数を使用することは適切な方法ではありません。毎回データ。

まず、ユーザーからのテキストファイルを期待してから、DBに参照パスを使用してファイルを一時的にアップロードしてください。このファイルは必要に応じてクリーンアップすることができ、コンテンツに簡単にアクセスできるようになります。これをさらに改善するには、キャッシュメカニズムを有効にし、アップロードされたファイルのキャッシュサーバーを設定します。

これでうまくいかない場合は、すでに提案されているセッション変数を使用していると考えることができる他のオプションがあります。したがって、このデータはセッションごとに保持され、要件に適合します。 session[:file_Data] = "put parsed content here"

関連する問題