Rails 5.1
我的GEM文件中有以下内容
gem 'delayed_job'
gem 'delayed_job_active_record'
gem 'daemons'
然后我做了:
rails generate delayed_job:active_record
这在bin中生成了两个名为
delayed_jobs.rb
并创建了迁移文件。
我将以下内容添加到
config/application.rb
:
config.active_job.queue_adapter = :delayed_job
我有一个控制器,带有一个动作,它获取一个已经上传的csv文件,解析它,并用数据填充数据库。我希望该方法,或者具体地说,该方法的一部分在后台处理。
方法是:
def process_parsed_spreadsheet
temp_file_path = params[:temp_file_path]
@spreadsheet = helpers.open_worksheet(temp_file_path)
number_of_rows = @spreadsheet.count - 1
helpers.process_spreadsheet(number_of_rows, @spreadsheet, params[:followed_id])
helpers.remove_uploaded_file(temp_file_path)
redirect_to root_path, notice: t('fw_exports.file_successfully_processed')
end
我不知道如何在后台使用delayed_作业处理此方法。我读过关于有一个模型,然后在后台有一个模型过程中的方法,但这是不同的。
解决方案(基于以下答案):
我补充了以下内容:
app/jobs/parse_和process_spreadsheet_作业。rb型
class ParseAndProcessSpreadsheetJob < ApplicationJob
queue_as :default
def perform(temp_file_path, followed_id)
@spreadsheet = helpers.open_worksheet(temp_file_path)
number_of_rows = @spreadsheet.count - 1
helpers.process_spreadsheet(number_of_rows, @spreadsheet, followed_id)
helpers.remove_uploaded_file(temp_file_path)
redirect_to root_path, notice: t('fw_exports.file_successfully_processed')
end
end
我的应用程序/控制器/fw\u导出控制器。rb:
def process_parsed_spreadsheet
ParseAndProcessSpreadsheetJob.perform(params[:temp_file_path], params[:followed_id])
end