我正在使用延迟工作来完成一些可能需要一些时间的载波工作。
目前我已经创建了一个简单的工作,成功的钩子,它看起来像这样:
class VideoclipDownloadJob
def initialize(video_id)
@video_id = video_id
end
def perform
Videoclip.grab_videoclips(@video_id)
end
def success(job)
Rails.logger.info { "Videoclip downloads for video: #{@video_id} complete" }
Video.find(@video_id).update_attribute(:videoclips_downloaded, Time.now)
end
end
它工作正常,我目前在浏览器中实现了一些AJAX轮询,以检查作业何时完成并重定向。
但是,我对这种方法有两个问题,并希望就此得到一些建议。
首先,如果用户当前没有javascript,则在作业完成后无法重定向。
因此,我希望在我的工作成功钩子中加入redirect_to
。我尝试将此直接添加到success(job)方法中但没有成功,并且还在我的模型中创建了一个方法来执行此操作。
在那一点上,它让我意识到它似乎不是一个好的MVC模式。
我是否应该完全依赖javascript或者有更好的选择吗?
我的第二个问题与使用Carrierwave有关。
它适用于文件的基本传输,但文件可能非常大,我真的希望能够不仅显示两个状态......下载和完成,还有进度(百分比)实际转移。
在客户端,我可以像处理工作一样轮询这些信息。
但是 - 我在Carrierwave文档中找不到任何提及找出上传者特定进度的方法。
非常感谢任何关于实现这两件事的最佳方法的建议。
谢谢,
克里斯
答案 0 :(得分:2)
redirect_to是对browser / js请求的响应。当您安排了后台作业并且JS被禁用时,如果用户的浏览器没有发出任何新请求,则无法重定向用户。如果你在他的浏览器提出新请求时重定向他,那可能不是一个好主意,因为你可能会打断他的工作。