1

我想在延迟作业中调用 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

现在的情况是我正在使用带有延迟作业的 pdf 工具包,但没有直接导出 pdf 文件。我有链接 locahost/print 如果我想以 pdf 格式打开它,只需输入 localhost/print.pdf 或使用 link_to :action => "print", :format => "pdf" 但是如果 pdf 文件很大,它性能不佳,所以我想在延迟作业中打开 localhost/print.pdf。那么我该如何解决这个问题

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

4

2 回答 2

0

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

  • 1) 控制器收到请求
  • 2) 控制器调用延迟的作业并传递“长时间运行”进程
  • 3) 控制器继续前进,无需等待延迟作业的回复

因此,在这种情况下,您所问的内容有点“奇怪”,但是,如果您的要求是通知用户等。一旦过程完成,

a)通过更新数据库列delayed_job并从您的视图中读取它 b)使用某种server-push方法,它内置到 rails4,或者使用像Faye这样的 gem

高温高压

于 2013-11-12T02:20:14.267 回答
0

如上所述,您可以只使用数据库(一个状态列)并以这种方式进行(工作人员更新列,页面一些如何自动刷新和不断获取列值)但是现在,我强烈建议使用活动电缆(现在是 rails 5+ 的一部分)

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

希望这可以帮助!

于 2018-04-20T17:27:02.407 回答