任务:以方式删除一个项目Async
[HomeWork]
我已经在我的 rails 应用程序中配置Active jobs
了delayed_jobs
,但我仍然对Async
在 rails 项目中执行任务感到困惑。
让我们举个例子:我有一些项目要从数据库中删除,但我想以某种Async
方式进行。我还在博客中阅读了有关perform_later
或perform_now
方法的信息。delayed_job
这是我的代码,它工作正常:
控制器类
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的官方文档,我可以handle_asynchronously
在方法的末尾添加以运行async
方式。在这种情况下我该如何实施?
我的问题:
- 当我查看
destroy
方法时,它不会以Async
某种方式删除元素。destroy
但是,方法中编写的每个步骤都在Synchronous
. 我错了吗? - 如果不是,那么我该如何实现以异步方式
destroy
删除的方法?post
- 后台任务和cron作业是一回事吗?
编辑-1
在 A Fader Darkly 给出建议后,我将其更改perform_now
为perform_later
对进程非常有效,Async
但它没有从表中删除条目(代码很好,因为它在我用户时有效perform_now
)。
此外,当我通过以下命令手动运行作业时,一切正常:
rake jobs:work
有什么方法可以在获得一些新数据delay_job
后立即执行任务?queue