Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dive into MaintenanceTasks
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
hatsu
August 01, 2024
Programming
220
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dive into MaintenanceTasks
hatsu
August 01, 2024
More Decks by hatsu
See All by hatsu
Prism.parseで 300本以上あるエンドポイントに 接続できる権限の一覧表を作ってみた
hatsu38
1
200
MySQL初心者が311個のカラムにNot NULL制約を追加していってALTER TABLEについて学んだ話
hatsu38
2
420
introduction_scriptor_gem.pdf
hatsu38
1
190
約9000個の自動テストの 時間を50分->10分に短縮 Flakyテストを1%以下に抑えた話
hatsu38
25
20k
Just a Rails Patch Update
hatsu38
2
960
GitHub Actions is Fun
hatsu38
1
220
Other Decks in Programming
See All in Programming
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
350
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.1k
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
1.5k
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
450
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
230
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
310
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
1.3k
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
150
Oxlintのカスタムルールの現況
syumai
5
1k
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
120
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
460
ふつうのFeature Flag実践入門
irof
7
3.6k
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Odyssey Design
rkendrick25
PRO
2
690
Docker and Python
trallard
47
3.9k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
320
The Curious Case for Waylosing
cassininazir
1
370
Statistics for Hackers
jakevdp
799
230k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
130
Transcript
Dive into MaintenanceTasks omotesando.rb#100, roppongirb#21 2024/08/01 @hatsu_38
ࣗݾհ • Rubyྺ 5 = ΤϯδχΞྺ • SHE Inc. •
React.js / TypeScript / GitHub Actions • Ruby͕Ұ൪͖
͓அΓɻ ίʔυͷղઆͱ͔ೖΕͨΒεϥΠυ͕ 81ຕʹͳͬͯ5ͰऴΘΔΘ͚͕ͳ͍ ͷͰޙۦ͚&ં͍͖ͬͯ·͢🏃
ٕज़ελοΫ • Backend: Ruby, Ruby on Rails, GraphQL, Sidekiq •
Frontend: React.js, TypeScript, Next.js • CI: GitHub Actions • Infrastructure: Kubernetes
Initial commit͔Β7…
Rake taskͷ࣮ߦํ๏ 1. podʹkubectl exec … bashͰೖΔ 2. bundle exec
rake … 3. ్தͰࣦഊͨ͠Β࢝Ί͔Β…
ຊ൪αʔόʔʹೖΔͷා͍🙅 Rake taskͷ࣮ߦํ๏ 1. podʹkubectl exec … bashͰೖΔ 2. bundle
exec rake … 3. ్தͰࣦഊͨ͠Β࢝Ί͔Β…
ຊ൪αʔόʔͰखಈͰίϚϯυ࣮ߦා͍🙅 Rake taskͷ࣮ߦํ๏ 1. podʹkubectl exec … bashͰೖΔ 2. bundle
exec rake … 3. ్தͰࣦഊͨ͠Β࢝Ί͔Β… ຊ൪αʔόʔʹೖΔͷා͍🙅
ຊ൪αʔόʔͰखಈͰίϚϯυ࣮ߦා͍🙅 Rake taskͷ࣮ߦํ๏ 1. podʹkubectl exec … bashͰೖΔ 2. bundle
exec rake … 3. ్தͰࣦഊͨ͠Β࢝Ί͔Β… ຊ൪αʔόʔʹೖΔͷා͍🙅 ࢝Ί͔Β࣮ߦ͢Δͷ͕͔͔࣌ؒΔ🙅
Rake taskͷ࣮ߦํ๏ 1. podʹkubectl exec … bashͰೖΔ 2. bundle exec
rake … 3. ్தͰࣦഊͨ͠Β࢝Ί͔Β… ຊ൪αʔόʔͰखಈͰίϚϯυ࣮ߦා͍🙅 ຊ൪αʔόʔʹೖΔͷා͍🙅 ࢝Ί͔Β࣮ߦ͢Δͷ͕͔͔࣌ؒΔ🙅
MaintenanceTasks͍࢝Ίͨ🚀
MaintenanceTasks is Կ
MaintenanceTasks is Կ • UI্͔ΒCLI͔ΒJobΛ։࢝Ͱ͖Δ • UI্͔ΒJobʹ͍ͨ͠ύϥϝʔλͷઃఆͰ͖Δ • ։࢝ͨ͠+PCΛதஅɾ࠶։ɾΩϟϯηϧͳͲͰ͖Δ •
Jobͷ࣮ߦཤྺ࣮ߦঢ়گ͕֬ೝͰ͖Δ
MaintenanceTasks is Կ • UI্͔ΒCLI͔ΒJobΛ։࢝Ͱ͖Δ • UI্͔ΒJobʹ͍ͨ͠ύϥϝʔλͷઃఆͰ͖Δ • ։࢝ͨ͠+PCΛதஅɾ࠶։ɾΩϟϯηϧͳͲͰ͖Δ •
Jobͷ࣮ߦཤྺ࣮ߦঢ়گ͕֬ೝͰ͖Δ
• UI্͔ΒCLI͔ΒJobΛ։࢝Ͱ͖Δ • UI্͔ΒJobʹ͍ͨ͠ύϥϝʔλͷઃఆͰ͖Δ • ։࢝ͨ͠+PCΛதஅɾ࠶։ɾΩϟϯηϧͳͲͰ͖Δ • Jobͷ࣮ߦཤྺ࣮ߦঢ়گ͕֬ೝͰ͖Δ MaintenanceTasks is
Կ
• UI্͔ΒCLI͔ΒJobΛ։࢝Ͱ͖Δ • UI্͔ΒJobʹ͍ͨ͠ύϥϝʔλͷઃఆͰ͖Δ • ։࢝ͨ͠+PCΛதஅɾ࠶։ɾΩϟϯηϧͳͲͰ͖Δ • Jobͷ࣮ߦཤྺ࣮ߦঢ়گ͕֬ೝͰ͖Δ MaintenanceTasks is
Կ
• UI্͔ΒCLI͔ΒJobΛ։࢝Ͱ͖Δ • UI্͔ΒJobʹ͍ͨ͠ύϥϝʔλͷઃఆͰ͖Δ • ։࢝ͨ͠+PCΛதஅɾ࠶։ɾΩϟϯηϧͳͲͰ͖Δ • Jobͷ࣮ߦཤྺ࣮ߦঢ়گ͕֬ೝͰ͖Δ MaintenanceTasks is
Կ
MaintenanceTasksͷ͍ํ
MaintenanceTasksͷ͍ํ Collectionʹॲཧ͍ͨ͠σʔλΛఆٛ(ActiveRecord::Relation CSV)
MaintenanceTasksͷ͍ํ processʹ֤σʔλͷॲཧ͢Δ༰Λఆٛ Collectionʹॲཧ͍ͨ͠σʔλΛఆٛ(ActiveRecord::Relation CSV)
MaintenanceTasksͷ͍ํ bin/rails generate maintenance_tasks:install
MaintenanceTasksͷ͍ํ ͲͷTaskΛ࣮ߦ͍ͯ͠Δ͔ ։࢝࣌ࠁ ऴྃ࣌ࠁ ࣮ߦ࣌ؒ ࣮ߦ݅ ࣮ߦ(༧ఆ)݅ SecureRandom .uuid ࠶։ॴͷIndex(ID)
࣮ߦεςʔλε(Enum) enqueued / running / succeeded / cancelling / cancelled / interrupted / pausing / paused / errored bin/rails generate maintenance_tasks:install ΤϥʔͷClass ΤϥʔMessage Backtrace
ɾαʔόʔʹೖΒͣʹJobΛ࣮ߦͰ͖Δ✨ ɾMaintenanceTaskͳΒ్தͰ࠶։Ͱ͖Δ✨
ศརʂ✨
MaintenanceTasks࣮ߦʂ🚀
JobʹΤϥʔൃੜʂ💥
్த͔Β࠶։✨
Ͳ͏࣮ͬͯ͞ΕͯΔ͔ݟͯΈΔ🔍 MaintenanceTasks & JobIteration
MaintenanceTaskͷςʔϒϧ ͲͷTaskΛ࣮ߦ͍ͯ͠Δ͔ ։࢝࣌ࠁ ऴྃ࣌ࠁ ࣮ߦ࣌ؒ ࣮ߦ݅ ࣮ߦ(༧ఆ)݅ SecureRandom .uuid ࠶։ॴͷIndex(ID)
࣮ߦεςʔλε(Enum) enqueued / running / succeeded / cancelling / cancelled / interrupted / pausing / paused / errored bin/rails generate maintenance_tasks:install ΤϥʔͷClass ΤϥʔMessage Backtrace
CursorͷอଘλΠϛϯάΛ୳͢🔬
Job͕Enqueue͞ΕΔ·ͰΛ ͬͯΈΔ🏃
Job͕enqueue͞ΕΔ·Ͱ(ͬ͘͟Γ) RunϘλϯ show.html.erb Runner.run(*) RunsController#create 1. DBʹRunϨίʔυ࡞ 2. Jobͷenqueue Runner#run
show.html.erb
show.html.erb
show.html.erb MaintenanceTasks::RunsController#create
MaintenanceTasks::RunsController#create
MaintenanceTasks::RunsController#create MaintenanceTasks::Runnerͷݺͼग़͠
MaintenanceTasks::Runner#run
MaintenanceTasks::Runner#run MaintenanceTasks::Run modelͷnew
MaintenanceTasks::Runner#run MaintenanceTasks::Run modelͷnew MaintenanceTasks::TaskJob.new(run) = ActiveJob::Base.new(run)
MaintenanceTasks::Runner#run MaintenanceTasks::Run modelͷnew MaintenanceTasks::TaskJob.new(run) = ActiveJob::Base.new(run) MaintenanceTasks::Run modelͷstatusΛenqueuedʹมߋͯ͠อଘ
MaintenanceTasks::Runner#run MaintenanceTasks::Run modelͷnew MaintenanceTasks::TaskJob.new(run) = ActiveJob::Base.new(run) enqueue͢Δ MaintenanceTasks::Run modelͷstatusΛenqueuedʹมߋͯ͠อଘ
MaintenanceTasks::Runner#run MaintenanceTasks::Run modelͷnew MaintenanceTasks::TaskJob.new(run) = ActiveJob::Base.new(run) enqueue͢Δ MaintenanceTasks::Run modelͷstatusΛenqueuedʹมߋͯ͠อଘ Job͕enqueue͞Εͨʂ
Enqueue͞Εͨ͋ͱͷྲྀΕΛݟΔ🔍
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D ActiveJobͰఆٛ͞Ε͍ͯΔCallback ActiveJobͰఆٛ͞Ε͍ͯΔCallback
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D job-iteration gem͕ఆ͍ٛͯ͠ΔCallback sidekiq v7.3ʹsidekiq-iteration gemͰࣅͨϝιου͕Ճ͞Εͨ
ͦΕͧΕͷStepͰ ͬͯΔ͜ͱΛௐࠪ🛠
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTasks::RunͷσʔλΛrunningεςʔλεʹมߋ 2. perform͕࣮ߦ͞ΕΔ
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1 1. MaintenanceTasks::RunͷσʔλΛrunningεςʔλεʹมߋ 2. perform͕࣮ߦ͞ΕΔ
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTasks::RunͷσʔλΛrunningεςʔλεʹมߋ 2. perform͕࣮ߦ͞ΕΔ 1 1
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTasks::RunͷσʔλΛrunningεςʔλεʹมߋ 2. perform͕࣮ߦ͞ΕΔ 1 1 2
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTasks::RunͷσʔλΛrunningεςʔλεʹมߋ 2. perform͕࣮ߦ͞ΕΔ 1 1 2 2
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTasks::RunͷσʔλΛrunningεςʔλεʹมߋ 2. perform͕࣮ߦ͞ΕΔ 1 1 2 2 ରσʔλͷྻ࡞
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTasks::RunͷσʔλΛrunningεςʔλεʹมߋ 2. perform͕࣮ߦ͞ΕΔ 1 1 2 2 1ͭ1ͭσʔλΛॲཧ(Processϝιουͷ࣮ߦ) ରσʔλͷྻ࡞
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTasks::RunͷσʔλΛrunningεςʔλεʹมߋ 2. perform͕࣮ߦ͞ΕΔ 1 1 2 2 shutdown callbackͷ࣮ߦ ରσʔλͷྻ࡞ 1ͭ1ͭσʔλΛॲཧ(Processϝιουͷ࣮ߦ)
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTasks::RunͷσʔλΛrunningεςʔλεʹมߋ 2. perform͕࣮ߦ͞ΕΔ 1 1 2 2 shutdown callbackͷ࣮ߦ complete callbackͷ࣮ߦ ରσʔλͷྻ࡞ 1ͭ1ͭσʔλΛॲཧ(Processϝιουͷ࣮ߦ)
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. ॲཧ͖͢σʔλͷྻΛ࡞ 2. on_startϝιου࣮ߦ 3. RunϞσϧͷσʔλͷ։࢝࣌ࠁͱॲཧ༧ఆ݅Λߋ৽ 1. update!(started_at: Time.now, tick_total: count)
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. ॲཧ͖͢σʔλͷྻΛ࡞ 2. on_startϝιου࣮ߦ 3. RunϞσϧͷσʔλͷ։࢝࣌ࠁͱॲཧ༧ఆ݅Λߋ৽ 1. update!(started_at: Time.now, tick_total: count) 3
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. ॲཧ͖͢σʔλͷྻΛ࡞ 2. on_startϝιου࣮ߦ 3. RunϞσϧͷσʔλͷ։࢝࣌ࠁͱॲཧ༧ఆ݅Λߋ৽ 1. update!(started_at: Time.now, tick_total: count) 3 3
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTaskʹࣗͰॻ͍ͨdef process͕࣮ߦ͞ΕΔ 2. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTaskʹࣗͰॻ͍ͨdef process͕࣮ߦ͞ΕΔ 2. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽ 1
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTaskʹࣗͰॻ͍ͨdef process͕࣮ߦ͞ΕΔ 2. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽ 1 1
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. MaintenanceTaskʹࣗͰॻ͍ͨdef process͕࣮ߦ͞ΕΔ 2. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽ 1 1 2
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽ 2. cursorͷૠೖ 3. ΤϥʔͷClassBacktraceErrorϝοηʔδΛrunσʔλʹอଘ
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1 1. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽ 2. cursorͷૠೖ 3. ΤϥʔͷClassBacktraceErrorϝοηʔδΛrunσʔλʹอଘ
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽ 2. cursorͷૠೖ 3. ΤϥʔͷClassBacktraceErrorϝοηʔδΛrunσʔλʹอଘ 1 2
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1 3 1. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽ 2. cursorͷૠೖ 3. ΤϥʔͷClassBacktraceErrorϝοηʔδΛrunσʔλʹอଘ 2
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1 3 3 1. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽ 2. cursorͷૠೖ 3. ΤϥʔͷClassBacktraceErrorϝοηʔδΛrunσʔλʹอଘ 2
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. εςʔλεʹcancelled / paused / interrupted ͱcursorૠೖ(อଘ·ͩ) 2. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1 1. εςʔλεʹcancelled / paused / interruptedͷૠೖ(อଘ·ͩ) 2. Cursorૠೖ(อଘ·ͩ) 3. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1 1 1. εςʔλεʹcancelled / paused / interruptedͷૠೖ(อଘ·ͩ) 2. Cursorૠೖ(อଘ·ͩ) 3. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1. εςʔλεʹcancelled / paused / interruptedͷૠೖ(อଘ·ͩ) 2. Cursorૠೖ(อଘ·ͩ) 3. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽ 1 1 2
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D 1 1 3 2 1. εςʔλεʹcancelled / paused / interruptedͷૠೖ(อଘ·ͩ) 2. Cursorૠೖ(อଘ·ͩ) 3. ݱࡏͷॲཧ݅ͱܦա࣌ؒΛߋ৽
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1. statusʹsucceededΛɺended_atʹTime.nowʹૠೖ(อଘ·ͩ)
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1. statusʹsucceededΛɺended_atʹTime.nowʹૠೖ(อଘ·ͩ) 1
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1. ૠೖ͍ͯͨ͠cursorstatusended_atΛอଘ
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1. ૠೖ͍ͯͨ͠cursorstatusended_atΛอଘ 1
Enqueue͞Εͨ͋ͱͷྲྀΕ(ͬ͘͟Γ) 1. before_perform: Perform͕ݺΕΔલʹ࣮ߦ͞ΕΔɻ 2. on_start: Perform͞Εͨޙʹ࣮ߦ͞ΕΔɻ 3. each_iteration: ActiveRecord::RelationΛҰͭͣͭॲཧ͢Δɻ
1. on_error: StandardErrorͰݺΕΔ 4. on_shutdown: ॲཧ͕ऴΘͬͨͱ͖ɻதஅ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔɻ 5. on_complete: on_shutdownͷޙɻ࠶enqueueͷඞཁ͕ͳ͍ͱ͖ɻ 6. after_perform: Perform͕ऴΘͬͨޙʹ࣮ߦ͞ΕΔɻ D D 1. ૠೖ͍ͯͨ͠cursorstatusended_atΛอଘ 1 1
on_error after_performͰ ࠶։ॴΛه͍ͯͨ͠✨ (Ωϟϯηϧதஅͨ͠ͱ͖ಉ͡)
·ͱΊ • MaintenanceTasksศར • UI্ͰJob࣮ߦͰ͖Δ͠ɺجຊతʹ్தͰதஅɾ࠶։Ͱ͖Δ • SIGKILLͷ࣌࠶։Ͱ͖ͳ͍ɻSIGTERMͱ͔ͳΒ࠶։Ͱ͖Δ • Sidekiq v7.3ͰࣅͨΑ͏ͳػೳ͕ೖͬͨ
• RunsςʔϒϧͰͳ͘ɺredisͰཧͯ͠Δ