タグ

ブックマーク / n8.hatenablog.com (3)

  • Sidekiqを安全に再起動(終了)したい - $web->{note};

    バージョン Sidekiq 3.3.0 基動作 ジョブが走っている状態でSidekiqを終了すると、8秒間(デフォルト)待って終了する。そして、8秒以内に終了しなかったジョブはキューに戻される。 メール送信くらいの軽いジョブであればで問題にはならないが、例えば、AWSAPI叩いてRDSのインスタンスを作って完了まで待つジョブなんて走らせると平気で20分以上かかってしまう。しかもキューに戻されると再起動後にもう一台インスタンスが作成されてしまうのでかなり問題だ。 では安全に再起動するにはどうすればいいのか Sidekiqのプロセスに対してまずはSIGUSR1を送り、その後にSIGTERMを送ればいい。 SidekiqはUSR1を受け取ると、実行中のジョブはそのまま継続し、新規ジョブの実行を停止する。(キューは引き続き溜まる) 実行中のジョブが0になったタイミングでTERMを送って終了し、

    Sidekiqを安全に再起動(終了)したい - $web->{note};
  • ActiveSupport::Notificationsで実行されるSQLを確認する - $web->{note};

    ActiveRecordなどORMを使用していると、うっかり大量のSQLを発行してしまうことがある。Bulletを使えばN+1のクエリは検知出来るが、そうでないクエリでも肥大化するケースはある。 例えば、集計するような処理を複数のモデルからメソッドを寄せ集めて書いていると、いつの間にか実行されるSQLが膨れ上がっていたということがあった。 もちろん実装の問題なので、そのときは実装方法を考え直して解消したが、そもそも開発している段階では、ログに張り付いていないと気付きにくいという問題がある。 ブラウザでロードした際に実行される処理であれば、rack-mini-profilerやChrome拡張のRails PanelからSQLの数と内容を確認できるが、APIやバックグラウンド処理の場合は難しい。 もっとカジュアルに確認できないものかと調べていたら、ActiveSupport::Notific

    ActiveSupport::Notificationsで実行されるSQLを確認する - $web->{note};
  • Mojolicious::Lite で Kobito ビューワー的なものを作ってみた - $web->{note};

    最近勉強メモを残すのに Kobito というアプリを使っている。ただこのアプリ、残念なことにMac用のクライアントしかなくて、データもローカルに保存されているので、せっかくメモしても会社のWindows PCから見ることが出来ない。 なんとかして会社からも見たいなと思い調べてみると、データは ~/Library/Kobito/Kobito.dbSQLiteDBで保存されていることが分かったので、サーバ経由で閲覧出来るようWebアプリを書いてみることにした。 データのアップについてはKobito.dbをDropboxに移して元あった場所にはsymlinkを張るのが一番楽かなと思ったけど、サーバにDropbox内のデータを全て同期させるのはちょっと嫌だし、閲覧専用になら常にMac側がマスターとなるので、ベタにcronでサーバへrsyncすることに。 自宅サーバなため、そのままcronta

    Mojolicious::Lite で Kobito ビューワー的なものを作ってみた - $web->{note};
  • 1