【发布时间】:2015-06-30 11:19:00
【问题描述】:
任务:
以Async的方式删除一个项目[HomeWork]
我已经在我的 rails 应用程序中配置了 Active jobs 和 delayed_jobs,但我仍然对在 rails 项目中执行 Async 任务感到困惑。
我们举个例子:
我有一些项目要从数据库中删除,但我想以Async 的方式删除。我还在delayed_job 博客中读到了perform_later 或perform_now 方法。这是我工作正常的代码:
控制器类
def destroy
PostJob.perform_now(params[:id])
respond_to do |format|
format.xml { head :ok }
format.js { render 'posts.js.erb' }
end
end
职位类别
class PostJob < ActiveJob::Base
queue_as :default
def perform(id)
@post = Post.find(id)
@post.destroy
end
end
根据delayed_jobs的official doc,我可以在方法末尾添加handle_asynchronously,以async的方式运行。在这种情况下我该如何实施?
我的问题:
- 当我查看
destroy方法时,它不会以Async方式删除元素。但是,用destroy方法编写的每个步骤都在Synchronous中。我错了吗? - 如果不是,那么如何实现
destroy方法以异步方式删除post? - 后台任务和 cron 任务是一回事吗?
编辑-1
在 A Fader Darkly 提出建议后,我将 perform_now 更改为 perform_later,这对于 Async 进程非常有效,但它没有从表中删除条目(代码很好,因为它在我用户 @987654343 时有效@)。
当我通过以下命令手动运行作业时,一切正常:
rake jobs:work
有什么方法可以在queue 获得一些新数据后立即执行delay_job 任务?
【问题讨论】:
标签: ruby-on-rails ruby asynchronous delayed-job rails-activejob