10

私はcsvとExcel Railscastのインポートと同様のアイデアを使用していますが、そのエピソードの標準コードは処理に時間がかかるため(ActiveRecordを使用してファイル内の各行の新しいレコードを作成します)、Herokuでタイムアウトが発生していますインポート プロセスをバックグラウンド ジョブに移行したいと考えています。

ファイル変数 (ActionDispatch::Http::UploadedFile 型) をジョブに送信できなかったので、代わりに file.original_filename と file.path の個々の変数を送信しました

file /var/folders/q3/xn0bp7yd2m56_4lbq0069jj80000gn/T/RackMultipart20150319-72431-1a4pnja.xlsx does not existジョブが開始される前にファイルが既に削除されているため、ジョブは次のように発生していると思われるエラーで失敗します。

アップロードされたファイルは、1 回のリクエストで有効期限が切れる一時ファイルです。オブジェクトがファイナライズされると、Ruby はファイルのリンクを解除するため、別のメンテナンス タスクでファイルをクリーンアップする必要はありません。

ActionDispatch::Http::UploadedFile

ActionDispatch::Http::UploadedFile でアップロードされたファイルは、バックグラウンド ジョブで使用できませんか?

Rails 4.2、ActiveJob、および Resque を使用しています

4

1 に答える 1

14

いいえ、アップロードされたファイルはバックグラウンド ジョブでは使用できません。バックグラウンド ジョブを処理するために、アップロードしたファイルをより永続的な場所に保存する必要があります。

コントローラーは次のようにする必要があります。

file_path_to_save_to = '/path/to/file'
File.write(file_path_to_save_to, params[:uploaded_file].read)
BackgroundJob.perform_later file_path_to_save_to
于 2015-03-19T03:17:37.883 に答える