既存の dyno でタスクを実行する
最終更新日 2025年04月10日(木)
Table of Contents
heroku run:inside
コマンドは Fir 世代のアプリでのみ使用できます。Cedar 世代のアプリは heroku ps:exec
を使用できます。
One-off-dyno を起動する heroku run
コマンドは、Fir 世代のアプリでは使用できません。heroku run
が Fir で利用可能になるまで、heroku run:inside
を使用してください。詳細は、「Heroku 世代」を参照してください。
heroku run:inside
コマンドを使用すると、アプリの既存の dyno の 1 つに SSH 経由で接続し、その中でコマンドを実行できます。
heroku run:inside
のユースケースには次のものがあります。
データベースの移行には、代わりに heroku run
または heroku run:detached
を使用します。
heroku run:inside の使用
前提条件
- Heroku CLI をインストールします。
- Heroku アカウントに SSH キーが追加されていることを確認します。
- コマンドを実行するには、少なくとも 1 つの実行中の dyno が必要です。
heroku ps
を使用してアプリケーションで現在どの dyno が実行されているかを確認できます。
$ heroku ps
=== web: `bundle exec unicorn -p $PORT -c ./config/unicorn.rb`
web-5f454b8b9-ztwlh: up 2024/11/01 18:04:16 +0000 (~ 19h ago)
実行構文
heroku run:inside
は、接続する dyno の名前と、その dyno 内で実行するコマンドの 2 つの引数を受け入れます。
$ heroku run:inside <example-dyno-name> <example-command>
Heroku は dyno 内で実行するコマンドの先頭に自動的に launcher
を追加した後、コマンドを実行します。先頭への追加を回避するには、--no-launcher
フラグを渡します。
コマンドを実行しようとして予期しないエラーが発生した場合は、--no-launcher
フラグを渡すときにコマンドをもう一度試してください。
2 番目の引数については、heroku run:inside
はアプリケーションの Procfile に存在するプロセスタイプも受け入れることができます。
たとえば、Python インタープリターを引数として入力されたファイル dowork.py
で実行してから、heroku run:inside <example-dyno-name> python dowork.py
を実行します。
Procfile で宣言されたプロセスタイプを指定することもできます。この場合、その定義は置換され、追加の引数と共に実行されます。たとえば、以下の Procfile
があるとします。
myworker: python dowork.py
以下を実行することにより、<example-dyno-name>
dyno 内で python dowork.py 42
を実行できます。
heroku run:inside <example-dyno-name> myworker 42
フラグの処理
dyno で実行する必要があるコマンドまたはフラグは、heroku
コマンドとフラグから --
で分離します。
たとえば、dyno で ls -a
を実行するには、次のようにします。
heroku run:inside web-5f454b8b9-ztwlh --app your-app -- ls -a
Running ls -a on ⬢ your-app... up, web-5f454b8b9-ztwlh
. .. Procfile server.js
dyno から切断する
heroku run:inside
で接続した dyno から切断するには、exit
と入力します。切断後も dyno は通常どおり動作を続けます。
$ heroku run:inside web-5f454b8b9-ztwlh bash
Running bash on your-app... up, web-5f454b8b9-ztwlh
~ $ bin/do-work
~ $ exit
$
タイムアウト
15 分間インタラクションがない場合、セッションは自動的にタイムアウトします。
例
Bash
既存の dyno の動作を確認するには、Heroku にデプロイされているすべてのアプリケーションで利用可能な bash コマンドを実行します。
$ heroku run:inside web-5f454b8b9-ztwlh bash
Running bash on your-app... up, web-5f454b8b9-ztwlh
~ $
bash
コマンドは、ファイルシステムおよび既存の web-5f454b8b9-ztwlh
dyno のプロセス環境を探索するためのシェル環境を提供します。
シェルと対話し、デプロイしたファイルをすべて一覧表示します。
~ $ ls
Procfile project.clj src bin ...
bin
ディレクトリにバッチファイルがある場合、その他多くの Unix コマンドと同じように実行できます。
~ $ echo "Hi there"
Hi there
~ $ pwd
/app
~ $ bin/do-work
終了するには、次のようにします。
~ $ exit
コンソールを実行する
アプリコンソールを実行します。
$ heroku run:inside web-5f454b8b9-ztwlh rails console
Running rails console on your-app... up, web-5f454b8b9-ztwlh
Loading production environment (Rails 3.0.3)
irb(main):001:0> Widget.create :name => 'Test'
=> #<Widget id: 1, name: "Test", size: nil, created_at: "2011-05-31 02:37:51", updated_at: "2011-05-31 02:37:51">