본문 바로가기

개발노트/Ruby

(4)
Rails + Sidekiq 에서 Retrying Jobs 를 rails console 에서 한 번에 kill 하기 rs = Sidekiq::RetrySet.new rs.select { |job| job.args[0]['job_class'] == 'SomeNameSpace::SomeModule::SomeClassName' && job.args[0]['arguments'][0] == 'target job arg.' } .sample(remaining_1_count) .each { |job| job.delete }
Rspec 에서 "여러" 인스턴스가 지정한 메소드를 실행하는지에 대한 Assertion 이번에 rails 에서 aws-sdk gem 을 이용하여 sns 를 사용하는 코드를 만들고 있다. 그런데 어떠한 이유로 aws 의 상태가 좋지 않거나, 인터넷 상태가 좋지 않는 등의 이유로 해당 로직이 실패할 수 있을 것 같아, begin ~ rescue 문법을 이용해 retry 로직을 구현하였다. begin 블럭안에서 처리하는 로직에서 Aws::SNS::Topic 클래스의 인스턴스를 retry 할 때마다 새로 생성하도록 했는데 (처음에는 singleton 으로 했다가, thread safeness 를 보장한다는 내용을 찾을 수 없어서, local variable 로 매번 인스턴스 생성하도록 처리하게 하였음) 여러 인스턴스가 생긴 것에 대해서 Rspec 에서는 자주 쓰이는 expect 나 expect_a..
Rspec 에서 어떤 Mailer 를 이용하여 발송될지에 대한 테스트 it '메일의 종류는 A 메일이다' do expect { subject }.to have_enqueued_job.on_queue('mailers').with('AMailer', any_args) end 간단한 건데도, 삽질을 좀 많이 했네. rails 에서의 mail 발송(deliver 메소드)은 결국 queue 를 통해서 이뤄지므로, queue 에 넣는 내용을 확인하면 된다. "mailers" 라는 이름의 큐로 enqueue 될 땐, Mailer 클래스의 이름이 전달인자 중 가장 처음으로 들어가기 때문에, with 메소드의 전달인자로 mailer 이름 문자열을 넣어주면 된다.
[Ruby on Rails : 루비언어로 작성된 웹어플리케이션 개발 프레임워크] 루비로 웹 개발 시작하기 http://rubykr.github.io/rails_guides/getting_started.html