在Sidekiq的日程安排之后将数据保存到数据库

时间:2015-12-20 13:19:19

标签: ruby-on-rails ruby-on-rails-4 sidekiq

我可能错过了Sidekiq的概念。我的理解是你可以创建一个后台作业,让它在保存到数据库之前等待x分钟。到目前为止我是否正确(保存到数据库)?

我已经获得了sidekiq to show my jobs但是在x分钟之后,我不知道之后会发生什么。

在Sidekiq之前,这是我在提交帖子后保存到数据库的方式:

support_controller.rb:

def create
 @user = current_user
 @support = @user.supports.build(support_params)

 if @support.save
  flash[:success] = 'Yes'
 else
  flash[:alert] = 'No'
 end
 ...

private
 def support_params
  params.require(:support).permit(:foo)
 end
end

使用Sidekiq: this post

使用Sidekiq的原因是我需要在x天后删除帖子。

1 个答案:

答案 0 :(得分:0)

如果您使用Sidekiq的唯一原因是在x天之后删除帖子,即使不使用Sidekiq也可以实现此目的:

  1. 存储应在数据库中删除帖子的时间。
  2. 创建一个rake任务,删除删除日期已过期的所有帖子。
  3. 每隔x天/小时/分钟从cron作业运行此rake任务。
  4. 要在部署/内部ruby上创建cron作业,您可以使用像whenever这样的gem。所以你的佣金任务就像:

    namespace :posts do
      desc 'Clean up posts'
      task clean: :environment do
        # with callbacks (method 1)
        Post.where('delete_at >= ?', DateTime.now).each do |post|
          post.destroy
        end
    
        # without callbacks (method 2)
        Post.delete_all('delete_at >= ?', DateTime.now)
      do
    end
    

    而不仅仅是在以下时间创建一个cron作业:

    # just run the rake task every x days at x:xx
    every 1.day, at: '1:00 am' do
        rake "posts:clean"
    end