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