如何使用 Delayed_job 运行 Prawn 脚本。
(目前使用Bj但在Rails3中不受支持)
此代码不起作用。
/lib/report_job.rb
class ReportJob < Struct.new(:prawn_script_name , :account_id )
def perform
bundle exec rails runner "#{Rails.root}/jobs/#{prawn_script_name}.rb #{@current_user.account_id} "
end
/reports_controller.rb
def generate_report(prawn_script_name)
Delayed::Job.enqueue(ReportJob.new("#{prawn_script_name}.rb","#{@current_user.account_id}"))
end
delayed_job表按预期填充。
--- !ruby/struct:ReportJob
prawn_script_name: statements.rb
account_id: '18'
Error in last_error field.
{undefined method `runner' for ReportJob:0xc28f080
有什么建议吗?
答案 0 :(得分:1)
我认为这里存在一些误解:
您想要做的是一个简单的系统调用。
看来你的prawn脚本需要环境,所以只需调用
system "ruby #{Rails.root}/jobs/#{prawn_script_name}.rb #{account_id}"
不起作用。
现在您可以从项目目录中使用runner运行脚本。
system "bundle exec rails runner #{Rails.root}/jobs/#{prawn_script_name}.rb #{account_id}"
但是在您的环境中通过系统调用执行此操作非常多余。延迟作业已经可以访问您的rails环境。所以只需加载它们。
class ReportJob < Struct.new(:prawn_script_name , :account_id )
def perform
load "#{Rails.root}/jobs/#{prawn_script_name}.rb"
end
end
希望这会有所帮助