Techioz Blog

Heroku のバックグラウンド ジョブ

概要

私は Heroku を初めて使用し、Rails アプリのチュートリアルを進めています。

現時点では、sidekiq を使用していくつかのバックグラウンド ジョブを処理するだけです。唯一のフロントエンド コンポーネントは Sidekiq ダッシュボードです。

ProcfileでWebサーバーを起動するように書かれています。しかし、必要なのは、特定の間隔でバックグラウンド ジョブを実行するようにワーカーをスケジュールしておくことだけなので、キューイング ダッシュボードを見たい場合以外は Web サーバーを起動できないということなのでしょうか? rake タスクに他の要素がある限り、Web サーバーをオフのままにできるはずです。

また、コードを Heroku にプッシュしても、DB は自動的に移行されないことに気付きました。毎回データベースが最新であることを確認したい場合、それを Procfile にも入れますか?

解決策

Web サーバーではなく Sidekiq のみを実行するのは正しいです。次のように procfile を作成できます。

worker: bundle exec sidekiq -C config/sidekiq.yml

この Procfile コマンドは Sidekiq プロセスを開始しますが、Web サーバーは開始しません。おっしゃるとおり、バックグラウンド ジョブの処理にはこの設定で十分です。

一方、デプロイごとに Heroku でデータベースを移行する場合は、Procfile のリリース フェーズ スクリプトを使用してこのプロセスを実際に自動化できます。

release: bundle exec rake db:migrate

Procfile に release コマンドを含めることで、Heraku は各デプロイ後に rake db:merge を自動的に実行し、データベース スキーマが最新であることを確認します。

これが最終的な Procfile です。

release: bundle exec rake db:migrate
worker: bundle exec sidekiq -C config/sidekiq.yml