2010-06-15 93 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,我得到了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上'。閱讀。

如何檢查我得到正確的數據params ['Filedata']或不是? 沒有send_later它工作正常......有沒有解決方案?

回答

0

使用send_later應該可以正常工作。另一種方法是定義自己的班級,回覆perform,並致電Delayed::Job.enqueue YourClass.new

您是否在某處出錯?

+0

我編輯了錯誤的帖子。有沒有解決方法? – 2010-06-15 21:53:16

1

您應該檢查數據庫中的內容。運行時,它延遲工作必須具備的字符串,或IDS內部:最有可能

PARAMS [「Filedata上」]

含有一種工作以後運行時,是不是有救。

+0

如果用戶上傳任何csv文件比首先load_balance函數將公開創建該文件/從原始文件上載和寫入它的內容。與使用更快的csv相比,它將輸入從文件到數據庫的記錄。但它不會在數據庫中存儲任何params ['Filedata']或params ['Filename']。 – 2010-06-15 22:02:57