1

私のコントローラー data_files_controller.rb

def upload_balances
  DataFile.load_balances(params)
end

私のモデル data_file.rb

def self.load_balances(params)
  #  Pull the file out of the http request, write it to file system
  name =  params['Filename']
  directory = "public/uploads"
  errors_table_name = "snapshot_errors"
  upload_file = File.join(directory, name)
  File.open(upload_file, "wb") { |f| f.write(params['Filedata'].read) }
  # Remove the old data from the table
  Balance.destroy_all
  # ------ more code-----
end

それはうまくいっています。今、コントローラーで遅延ジョブを使用して、..のようなモデル アクションを呼び出したいと思います。コントローラー data_files_controller.rb

def upload_balances
  DataFile.send_later(:load_balances,params)      
end

出来ますか??それを行う他の方法は何ですか?問題はありますか?

この send_later を使用すると、delayed_job テーブルの列 last_error でこのエラーが発生します。

uninitialized stream
C:/cyncabc/app/models/data_file.rb:12:in `read'
C:/cyncabc/app/models/data_file.rb:12:in `load_balances'
C:/cyncabc/app/models/data_file.rb:12:in `open'

オンラインでエラーが発生しています

File.open(upload_file, "wb") { |f| f.write(params['Filedata'].read) }

params['Filedata'].read の読み取り中。

params['Filedata'] で適切なデータを取得しているかどうかを確認する方法は? send_later がなければ正常に動作しています...解決策はありますか?

4

2 に答える 2

1

データベースの内容を確認する必要があります。遅延ジョブには、実行時に文字列または ID が内部的に含まれている必要があります: ほとんどの場合

params['ファイルデータ']

後でジョブを実行したときに復元できないものが含まれています。

于 2010-06-15T21:53:20.607 に答える
0

を使用send_laterすると正常に動作するはずです。もう 1 つの方法は、に応答する独自のクラスを定義してperformDelayed::Job.enqueue YourClass.new

どこかにエラーがありましたか?

于 2010-06-15T21:43:09.120 に答える