我正在为一些可能需要一些时间的载波任务使用延迟工作。
目前,我创建了一个简单的工作,并带有成功的钩子,它看起来像这样:
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 文档中找不到任何提及找出上传者具体进度的方法。
任何有关实现这两件事的最佳方法的建议将不胜感激。
谢谢,
克里斯