herokuでサブディレクトリをデプロイする

まえおき

herokuを使いたいなーと思って調べています。

herokuにデプロイするときに、 build-pack というものを使用します。
これは、デプロイされるアプリケーションの言語などを自動で推定してくれるやつです。これを設定しないとデプロイできません。

我々はphperなので、 heroku/php というものを使うのですが、公式ドキュメントにあるように、トップディレクトリに composer.json または index.php が必要になります。

Heroku PHP Support will be applied to applications only when the application has a file named composer.json in the root directory. Even if an application has no Composer dependencies, it must include an empty composer.json in order to be recognized as a PHP application.

が、僕はルートディレクトリは

という構成でやってるので、ルートディレクトリに composer.json がなくてデプロイできませんでした。
個人的にこの構成は気に入っているし、わざわざデプロイのためにディレクトリ構成を変更するのもおかしな話です。

解決策

調べてみると、subdir-heroku-buildpackというものを使うと、サブディレクトリのみをデプロイできるようです。

herokuの設定値に PROJECT_PATH という変数を設定し、このbuild-packを heroku/php の前にかましてあげるだけでデプロイできるようになります。

余談

上記のように簡単に設定できるはずだったのですが、私はかなりつまづきました。
というのも、 PROJECT_PATH を設定してるにもかかわらず、 PROJECT_PATH is undefined と怒られるんです。

結局のところ、pushしているブランチが違っていて、 PROJECT_PATH で指定しているディレクトリが見つからないのが原因でした。

エラーメッセージと原因が違うってどうなのよ??となったので、Forkして、ちゃんとエラーメッセージが出る版を作りました。

github.com

よければ使ってやってください。