루비 온 레일즈 사이드킥에서 예약 된 특정 작업을 삭제하는 법 (How to delete specific scheduled job in Ruby on Rails with Sidekiq)



## 루비 온 레일즈 사이드킥에서 예약 된 특정 작업을 삭제하는 법 (How to delete specific scheduled job in Ruby on Rails with Sidekiq)

루비 온 레일즈에서 사이드 킥으로 특정 작업을 예약한 후 작업을 할 수 있는데, 간혹 예약 된 특정 작업을 삭제하고 싶을 때가 있다. 예를 들어, 요금을 내지 않은 A고객에게 매일 한 번씩 미납된 요금에 대한 알림을 주도록 예약했는데 A고객이 자신의 요금은 부당하다고 얘기하는 경우, 잠시 멈추고 또는 영원히 알림을 제거해야할 수 있다. 좀 억지라고 느낄 수 있지만, 딱히 좋은 예시가 떠오르지 않으니 넘어가자.

어쨌든 그런 경우 예약된 작업을 제거하는 방법에 대해 알아보자. 아래의 코드는 예약된 작업들을 scheduled_job 에 담는 코드다.

```ruby
scheduled_job = Sidekiq::ScheduledSet.new
```

그 다음, schedule_job 중 내가 원하는 특정 작업을 아래와 같이 찾아 삭제할 수 있다. Job class 가 ShowMeTheMoney 이고 내 어플리케이션 서버의 Model id 를 파라미터로 사용한 경우 아래와 같이 class와 model id 를 찾아 삭제할 수 있다.

```ruby
scheduled_job.each do |job|
  if (job.args.first["job_class"] == "ShowMeTheMoney" && job.args.first["arguments"][0]["_aj_globalid"] == "gid://application-server/Model/#{model.id}")
     Model.find(model.id).destroy
  end
end
```

아래 코드를 콘솔에서 확인해 현재 본인의 예약 된 작업이 어떤 식으로 구성되어있는지 확인해보고 그에 맞게 수정해보는 것도 좋은 방법이다.

```ruby
scheduled_job.each do |job|
  puts job.args
end
```


댓글

이 블로그의 인기 게시물

부트스트랩 사용 시 버튼 오른쪽 정렬하는 방법 (How to use float-right for right align in bootstrap)

맥(Mac)에서 MySql 사용 시 Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 오류가 발생하는 경우 해결 방법

HTML, CSS - footer fixed (foot 하단 고정 시키기)