Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从延迟的作业中获取输出,例如PDF/HTML报告_Ruby On Rails_Delayed Job - Fatal编程技术网

Ruby on rails 如何从延迟的作业中获取输出,例如PDF/HTML报告

Ruby on rails 如何从延迟的作业中获取输出,例如PDF/HTML报告,ruby-on-rails,delayed-job,Ruby On Rails,Delayed Job,我觉得这是一个愚蠢的问题,因为每个人似乎都在掩饰这方面的事情 我的需求很简单——我正在Heroku上使用Ruport运行一些报告。复杂的报告需要很长时间,而且会超时。我已经决定使用延迟的工作-但我可以用其他东西代替。一旦我知道我在做什么,我可能还会用它做其他事情 我看到了很多例子,railscasts,关于如何启动和运行delayed_job及其兄弟的文档,如何管理您的工作队列,等等。一旦说到这一点,我可能会有一些问题,但现在 我怎么才能回到排队的工作岗位呢 现在,我只生成如下输出: @repo

我觉得这是一个愚蠢的问题,因为每个人似乎都在掩饰这方面的事情

我的需求很简单——我正在Heroku上使用Ruport运行一些报告。复杂的报告需要很长时间,而且会超时。我已经决定使用延迟的工作-但我可以用其他东西代替。一旦我知道我在做什么,我可能还会用它做其他事情

我看到了很多例子,railscasts,关于如何启动和运行delayed_job及其兄弟的文档,如何管理您的工作队列,等等。一旦说到这一点,我可能会有一些问题,但现在

我怎么才能回到排队的工作岗位呢

现在,我只生成如下输出:

@report_output     = @report_controller.render(@report_format,@report_params)
send_data @report_output, :filename => "#{@report_type}.#{@report_format}", :type => "application/#{@report_format}" unless :html == @report_format
(如果是html报告,则只会正常呈现页面)

它在开发中运行良好,在生产中超时。我可以从文档中看到,只需生成输出并将其发送给用户就非常容易了,这样我就不必担心重新获得工作了

但我不想那样。我只想向用户显示一个进度页面,定期轮询服务器,直到完成为止,然后重定向他们以查看HTML或PDF输出。我希望这会返回作业的某种ID,并将其交还给用户,以便他们可以检查它,但我不知道这是从哪里来的。我想我可以看看桌子,但那似乎很愚蠢。我甚至可以向用户显示一个排队/已完成作业的列表,让他们手动选择一个,但这太过分了。他们只想下载一份报告,他们不介意是否需要一两分钟

我实际上并没有为我的报告使用一个表,不需要,它们并没有被保存——但我想如果这有帮助的话,我可以给它们一个表和一个ActiveRecord模型。看来我不该那么做。我使用的是Rails 2.3,但它看起来与我的问题也不相关


似乎我所问的是如此明显,以至于没有人费心把它写下来,但我似乎找不到它。是否有示例应用程序?我错过了什么?我觉得自己很傻。

你把ruport生成的结果存储在哪里?如果你把它放在光盘上的某个地方,比如S3存储器,你可以预先生成报告的名称并将其交还给客户端。然后,如果文件存在,您可以轮询S3存储,然后在创建完成后将其流式传输到客户端

编辑


在将作业放入队列时,您似乎可以恢复作业的id:

您可以使用IronWorker之类的托管后台处理服务(免责声明:我为Iron.io工作)。您可以将作业传递给IronWorker,并让该工人在后台处理作业时更新状态。然后,您可以轮询IronWorker以向用户显示状态,并在完成时更新页面。您还可以使用工作进程的回调在工作进程和应用程序之间进行同步。很高兴能帮上忙

嗯,是的,我可以-这就是我所说的“如果有帮助的话,我想可以给他们一个表和一个ActiveRecord模型”-我可以生成,比如说,一个ReportGen记录,交回新记录的ID,在那里存储状态和文件名,然后用户可以轮询它。但是(a)这听起来比我应该做的更多,(b)为什么我找不到其他人做类似事情的示例代码?我希望该记录中有某种工作的ID号,以便我可以在以后杀死/清理挂起的工作?我从哪里得到的,为什么我不能把它交回去呢?嗨@stephan.com,这里的示例应用程序展示了如何设置和获取进度:查看tweet_worker.rb了解如何设置它,查看hello.rb了解如何获得它。hello.erb中有一些ajax显示了如何在UI中显示它。您解决了这个问题吗?我正面临着和你一样的问题。有大量的代码示例,但我找不到任何解决这个问题的方法