如何在延迟作业中调用redirect_to

时间:2013-11-11 23:10:56

标签: ruby-on-rails delayed-job redirecttoaction

我想在Delayed作业中调用redirect_to函数。 我有文件print_job.rb

class PrintJob < Struct.new(:device,:survey,:filter_tags,:day1,:day2,:lastsurvey, :scale)
  def perform
    pc = PagesController.new
    pc.redirect_to  "http://google.com"
    #pc.redirect_to :action => "print", :format => "pdf", :device => device, :survey => survey, :filter_tags => filter_tags,
    #:day1 => day1, :day2 => day2, :lastsurvey => lastsurvey, :scale => scale
  end

  def success(job)
  end
end

但它不起作用。如果我只是将redirect_to放到“htpp://google.com”。它说没有方法redirect_to

目前的情况是我正在使用带有delayed_job的pdf工具包,但没有直接导出pdf文件。我有链接locahost / print如果我想以pdf格式打开它,只需将localhost / print.pdf或使用link_to:action =&gt; “print”,:format =&gt; “pdf”但是如果pdf文件很大,它的性能不佳,所以我想在delayed_job中打开localhost / print.pdf。那么我该如何解决这个问题

那么如何在延迟工作中调用redirect_to呢?谢谢!

2 个答案:

答案 0 :(得分:0)

delayed_job被设计为在后台运行长进程,而不会中断rails控制器的http请求。所以它就像

一样
  • 1)控制器获取请求
  • 2)控制器调用延迟的作业并通过长时间运行的&#39; 过程
  • 3)控制器继续运行而不等待延迟工作的回复

因此,在这种情况下,您提出的问题是“奇怪的”,但是,如果您的要求是通知用户等,则一旦完成该流程,

a)由delayed_job更新数据库列,并从您的视图中读取它 b)使用某种server-push方法,built-in to rails4或使用像Faye这样的宝石

HTH

答案 1 :(得分:0)

如上所述,您可以使用数据库(一个状态列)并继续这种方式(工作者更新列,页面一些如何自动刷新并不断获取列值)但是现在此时,我强烈建议使用of active cable(现在是rails 5 +的一部分)

使用active cable,您可以轻松地在视图或控制器与任何工作人员之间创建通信通道,您只需为用户设置通道,然后在工作人员发送消息时一个监听器(使用js代码查看)将从通道公共通道获取广播消息(视图和工作者之间使用相同的名称/ ID等通用,这实际上只是一个表示通道名称的字符串,js代码(前端) )会有它和rails(后端)配置)

希望这有帮助!