отложенная проблема с работой в рельсах. - PullRequest
1 голос
/ 16 июня 2010

Мой контроллер 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 я получаю эту ошибку в столбце last_error в таблице delayed_job.

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) }

при чтении параметров ['Filedata']. читать.

как проверить, правильно ли я получаю данные в параметрах ['Filedata'] или нет?Без send_later работает нормально ... Есть какое-нибудь решение?

Ответы [ 2 ]

1 голос
/ 16 июня 2010

Вы должны проверить, что находится в базе данных. Задержанное задание должно иметь строки или внутренние идентификаторы при запуске: скорее всего

Титулы [ 'FILEDATA']

содержит что-то, что невозможно восстановить, когда задание запускается позже.

0 голосов
/ 16 июня 2010

с использованием send_later должно работать нормально.Другой способ - определить собственный класс, который отвечает на perform, и вызвать Delayed::Job.enqueue YourClass.new

Были ли где-то ошибки?

...