我想在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呢?谢谢!
答案 0 :(得分:0)
delayed_job
被设计为在后台运行长进程,而不会中断rails控制器的http请求。所以它就像
因此,在这种情况下,您提出的问题是“奇怪的”,但是,如果您的要求是通知用户等,则一旦完成该流程,
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(后端)配置)
希望这有帮助!