Запазване на данни в база данни след графика на 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. Създайте рейк задача, която изтрива всички публикации, чиято дата на изтриване е изтекла.
  3. Изпълнявайте тази рейк задача на всеки x дни/часа/минути от cron задача.

За да създадете задачата cron при внедряване / вътре в ruby, можете да използвате 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 
person tbraun89    schedule 20.12.2015