Sidekiq에서 모든 작업을 지우는 방법은 무엇입니까?


119

Rails 애플리케이션의 백그라운드 작업에 sidekiq을 사용하고 있습니다. 이제 일자리가 많아 져서 모든 일자리를 지우고 싶습니다. 콘솔에서 다음 명령을 시도했습니다.

Sidekiq::Queue.new.clear

그러나 다음과 같은 오류가 발생했습니다.

NameError: uninitialized constant Sidekiq::Queue 

sidekiq에서 모든 작업을 지우려면 어떻게해야합니까?


시도 include 'sidekiq'하기 전에
Benj

그주는 형식 오류를 @BenjaminSinclaire : 잘못된 인수 유형 문자열 (예상 모듈)
수는 없습니다

3
시도 require 'sidekiq'하기 전에
열린 아가시에게

1
난 항상 (정말 항상) 혼동 :) 포함 필요
Benj

답변:



207

문제 1077 에 대해 말 하거나 noobsippets 의이 블로그에 보고 된대로 수행 할 수 있습니다.

둘 다 다음을 수행 할 것을 제안하며 Rails 콘솔에서 수행 할 수 있습니다.

Sidekiq.redis { |conn| conn.flushdb }


이것은 내가 사용중인 Rails 앱에서 내 인증을 재설정하는 것 같습니다 (즉, 쿠키를 HTTP 클라이언트로 다시 복사해야 함). 그것을 방지 할 수있는 방법이 있습니까?
intcreator

1
안녕하세요, Brandeamon. Redis를 사용하여 프로젝트 세션을 제어하고 있습니까? 이러한 명령은 redis에 저장된 모든 데이터를 "정리"하기 때문에 관계형 데이터베이스에서 데이터베이스 삭제 또는 테이블 삭제와 동일합니다.
jonathanccalixto

1
이것은 투표를 고려할 때 받아 들여진 대답이어야합니다.
M. Habib

이것은 redis-cli flushdbRails 서버와 별도의 서버에서 redis를 실행하는 경우 보다 예측 가능하게 작동 합니다. redis-cli flushdb호스트 및 포트 인수를 포함해야한다는 것을 기억할 때까지 작동하지 않는 이유가 궁금 합니다.
maurice

4
이 접근 방식의 문제는 다른 서비스에서 동일한 redis / elasticache를 공유하는 경우 redis db의 다른 모든 데이터도 삭제된다는 것입니다.
Charles Skariah

80

Sidekiq 작업 지우기 명령 :

require 'sidekiq/api'

# Clear retry set

Sidekiq::RetrySet.new.clear

# Clear scheduled jobs 

Sidekiq::ScheduledSet.new.clear

# Clear 'Dead' jobs statistics

Sidekiq::DeadSet.new.clear

# Clear 'Processed' and 'Failed' jobs statistics

Sidekiq::Stats.new.reset

# Clear specific queue

stats = Sidekiq::Stats.new
stats.queues
# => {"main_queue"=>25, "my_custom_queue"=>1}

queue = Sidekiq::Queue.new('my_custom_queue')
queue.count
queue.clear

3
당신은 또한 모든 큐를 지울 수 있습니다 Sidekiq::Queue.all.map(&:clear)당신은 당신의 로케일 😅 찌르다와 DB를 동기화 할 때 ... 유용한
escanxr

36

최신 Sidekiq에서 그냥 날려 버리세요 :

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

예, 모두 지우기 명령은 말 그대로 폭탄 이모티콘입니다. 또한 작동합니다 Sidekiq::RetrySet.

또는 재미가 없다면 사용할 수 있습니다. q.clear


1
OMG, 도대체이게 뭐야? @Xavier, .💣이라는 방법이 있습니까?이 방법 (💣)에 대한 문서를 안내해 주시겠습니까?
codemilan

2
이 블로그 게시물을 참조 @codemilan : blog.honeybadger.io/...
후건 부정의 형식

나는 invalid byte sequence in US-ASCII (ArgumentError)실행했다 q.💣: /
Shankar Thyagarajan

21
redis-cli flushdb

당신은 또한 사용할 수 있습니다 redis-cli flushall


5
이 접근 방식의 문제는 다른 서비스에서 동일한 redis / elasticache를 공유하는 경우 db의 다른 모든 데이터도 삭제된다는 것입니다.
Charles Skariah

13

Rails 러너를 한 줄로 사용

rails runner 'Sidekiq.redis { |conn| conn.flushdb }'

10

모든 Sidekiq 작업은 "Redis"에 저장됩니다.

이 명령으로 "Redis"를 청소할 수 있습니다.

redis-cli flushall




0

나는 Sidekiq.redis { |conn| conn.flushdb }redis 데이터베이스에서 모든 키 를 제거 한다는 것을 깨달았습니다 . 다음을 사용하여 모든 sidekiq 대기열을 지우는 더 안전한 방법이 있습니다 redis-cli.

redis-cli keys "*queue:*" | xargs redis-cli del

Sidekiq API로도 동일한 결과를 얻을 수 있습니다 ( Ravi Prakash Singh 답변 참조 ).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.