我使用Rails 4应用程序运行Resque Scheduler,我发现无法取消排队的作业。我的控制器中有以下方法:
class Employers::SocialMediaPostsController < ApplicationController
def cancel
post = SocialMediaPost.find(params[:id])
respond_to do |format|
if post.cancel_post && post.destroy
format.json { render json: {}, status: :ok }
else
format.json { render json: {}, status: :bad_request }
end
end
end
end
然后在我的SocialMediaPost
模型中,我有以下方法:
def cancel_post
success = false
if self.scheduled_time > DateTime.now
options = {
id: self.id,
services: JSON.parse(self.services),
posts: JSON.parse(self.posts),
attachment_url: self.attachment_url,
media_url: self.media_url,
time: self.scheduled_time.in_time_zone("Eastern Time (US & Canada)")
}
success = Resque.remove_delayed(Postman, options) > 0
end
success
end
这是我的Postman
工作人员:
class Postman
@queue = :social_media_posts
def self.perform(options)
post = SocialMediaPost.find(options['id'])
post.post_tweet if options['services']['twitter'] && options['attachment_url'].blank?
post.post_tweet_with_media if options['services']['twitter'] && options['attachment_url'].present?
post.post_facebook_status if options['services']['facebook']
post.post_linkedin_status if options['services']['linkedin']
end
end
当我致电Employers::SocialMediaPostsController#cancel
时,它会在我的帖子上成功调用cancel
方法然后销毁它,但是如果我检查调度程序中的Delayed
标签,我仍然会看到我的帖子排队起来。
如果我打开一个控制台会话并调用以下代码来手动删除帖子,它就会起作用。
post = SocialMediaPost.find(id)
post.cancel_post
我在这里缺少什么?它适用于控制台会话,但不是在我调用API端点时。