2010-06-15 5 views
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 я получаю эту ошибку в столбце 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) } 

при чтении Params [ 'Filedata']. Читать.

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

ответ

0

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

У вас были ошибки где-то?

+0

Я отредактировал свое сообщение с ошибками. есть ли какое-нибудь решение? –

1

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

PARAMS [ «FILEDATA»]

содержит то, что не revivable, когда работа выполняется позже.

+0

Если пользователь загружает любой файл csv, чем первая функция load_balance, этот файл будет публиковаться/публиковаться и записывать в него содержимое из исходного файла. Чем быстрее csv будет вводить записи из файла в базу данных. Но он не хранит никаких параметров ['Filedata'] или params ['Filename'] в базе данных. –

Смежные вопросы