Rake コマンドの実行
最終更新日 2023年03月24日(金)
Table of Contents
Rake タスクは、アプリの dyno と同じ環境を使用して、Heroku 上で One-off dyno として実行されます。次のように heroku run rake
コマンドを使用して、リモートアプリ環境内で Rake タスクを実行できます。
$ heroku run rake db:version
Running `rake db:version` attached to terminal... up, run.1
(in /home/slugs/41913_06f36ef_ab3a/mnt)
Current version: 20231118092504
ローカルの場合と同様に、Rake 引数を渡したり、複数のタスクを実行したり、環境変数を渡したりできます。たとえば、冗長なバックトレース付きでデータベースを特定のバージョンに移行するには、次のようにします。
$ heroku run rake --trace db:migrate VERSION=20231118092504
移行を実行した後、heroku restart
でアプリを再起動し、スキーマをリロードしてスキーマの変更を取得することができます。
制限
すべての Rake 機能が Heroku でサポートされているわけではありません。次に示すのは、既知の制限の一覧です。
rake db:schema:dump
など、ディスクへの書き込みを行う Rake タスクは、Heroku の一時ファイルシステムと互換性がありません。db:reset
タスクはサポートされていません。Heroku アプリには、データベースを削除および作成するアクセス許可がありません。代わりにheroku pg:reset
コマンドを使用してください。
Heroku run bash
rake
コマンドには、heroku run bash
コマンドを通じて対話的にアクセスできます。このコマンドによって One-off dyno が起動し、rake
コマンドを実行できるシェルアクセスが提供されます。
$ heroku run bash
Running bash on ⬢ polar-inlet-4930... up, run.2581 (Standard-1X)
~$ rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
...