Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
32
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Organization

Laravel5 を Heroku にデプロイ

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"が足りないことに気づく。
追加。

composer.json
"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 doesn't recognize my Laravel app as PHP app, and does not do composer install - Stack Overflow

↑の通り。

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めっちゃ重要やん・・

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
32
Help us understand the problem. What are the problem?