Сохранение данных в базу данных по расписанию Sidekiq

Возможно, я неправильно понял концепцию Sidekiq. Насколько я понимаю, вы можете создать фоновое задание, позволить ему подождать x минут перед сохранением в базе данных. Я прав до сих пор (сохранение в базе данных)?

Я получил sidekiq , чтобы показать свои задания, но после 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: этот пост

Причина использования Sidekiq заключается в том, что мне нужно удалить сообщение через x дней.


person Sylar    schedule 20.12.2015    source источник


Ответы (1)


Если единственная причина, по которой вы используете Sidekiq, — удалить сообщение через x дней, вы можете добиться этого даже без использования Sidekiq:

  1. Сохраните время, когда сообщение должно быть удалено в вашей базе данных.
  2. Создайте задачу rake, которая удалит все сообщения, дата удаления которых истекла.
  3. Запускайте эту задачу rake каждые x дня/часа/минуты из задания cron.

Чтобы создать задание cron при развертывании/внутри ruby, вы можете использовать гем, например когда угодно. Таким образом, ваша задача rake будет выглядеть примерно так:

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 
person tbraun89    schedule 20.12.2015