Laravel5 で新しいアプリケーションを作成
composerでインストールしたlaravelで blog
という名前のアプリケーションを作る。
laravel new blog
早速Herokuにデプロイ!・・しようとしてこんなエラーで半日以上苦しんだ
heroku create
git push heroku master
heroku oepn
Herokuでもアプリを作って、push & openすると、素っ気ないエラーメッセージ・・
唯一の頼り、Herokuのログを見る
app[web.1]: bash: vendor/bin/heroku-php-apache2: No such file or directory
何故!!?
Procfileを追加してみる
apacheで動くように。。
web: vendor/bin/heroku-php-apache2 public/
エラー変わらず・・くそ〜〜
Heroku PHP getting startedをやる
諦めて公式のGetting Started with PHP on Heroku | Heroku Dev Centerをやる。
無事デプロイできる・・
違いを目視diffで頑張って探す。。
composer.jsonに追記
"heroku/heroku-buildpack-php"
が足りないことに気づく。
追加。
"require-dev": {
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1",
"heroku/heroku-buildpack-php": "*"
},
まだだめ。。
Herokuのデプロイ時のログを見てみようと気づく
実行時ログだけじゃなくて、デプロイ時のログを見てみた。
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Node.js app detected
remote: -----> Resetting git environment
Node.js??
なぜかNode.jsのアプリ認識されているらしい・・
そしてcomposerの追加ライブラリのロードとかもされず、heroku-buildpack-phpで入ってくる、heroku-php-apache2
とかがインストールされていない状態だったらしい。
解決
↑の通り。
heroku config:add BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-php
環境変数を設定せよ。とのことでした。
こうするとNode.jsじゃなくてPHPだと気づいてもらえるらしい・・・
番外
HerokuでPHPだと認識してもらうには・・
Heroku上でPHPである、と認識されるためには、アプリケーションルートに composer.json
が必要らしい。
そのためcomposet使わないPHPアプリでも、空のcomposer.json置いとけ、と公式に書いてある。
参考:Deploying PHP Apps on Heroku | Heroku Dev Center
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.
普通はこれだけで大丈夫らしい。
・・が、Laravel5のアプリケーションルートにpackage.json
もあるので、Node.jsかPHPか判定に迷い、(なぜか)Node.jsが勝つらしい・・
Herokuめ・・・
HerokuでNode.jsだと認識してもらうには・・
参考:Deploying Node.js Apps on Heroku | Heroku Dev Center
Heroku Node.js support will only be applied when the application has a package.json file in the root directory.
両方ある場合はなぜかNode.jsになってしまう・・・ひどい・・
この場合は環境変数で指定すれば大丈夫らしい。 BUILDPACK_URL
めっちゃ重要やん・・