Heroku でデプロイ時にシェルスクリプトを実行するためには .profile を作って書く方法もある(問題点あり)

結論

標題通りです。

Procfilerelease タグで書いてもうまくいかないときもあります。これはずばり「リリースフェーズ中のファイルシステムの変更はアプリの Dyno formation にデプロイされない」ということが理由です*1

この場合は .procfile に書くという逃げ道があります。

問題点

.profile なので、たとえば $ heroku run bash でシェルに入るときに毎回実行されてしまう。したがって、内容は冪等になるものであり、かつ、時間がかからないものにしないといけない。

「あなたが今やっていることはちょっと変なことだよ」ということの証拠だと思うので、とりあえずこじんまりとまとめるべき。

補足

  • 実際問題として何に困ってこの方法にたどり着いたかというと、PostgreSQL に接続するために証明書がいるのですが、それは「ファイルのパス指定」でしか対象を指定できないことです*2
  • .profile の実行と Procfilerelease: の実行順序については、Procfile の方が先です*3
    • このため、いろいろと辛みがあることが存在する

ドキュメント

devcenter.heroku.com

*1:期待されているリリースフェイズでの挙動は、アセットのアップロードやデータベースの構築など、外部のリソースだけに関わるものでしょう

*2:生テキストなら環境変数などが使えた

*3:したがって、.profile で生成したファイルを用いて Procfile で何かをすることはできない

Powered by はてなブログ