HerokuでPHPのアプリケーションを動かしてみる

HerokuでPHPのアプリケーションを動かしてみる

EC-CUBEをHerokuに5分で立ち上げられるようにしましたを書くためにやったこと、ハマったことを書いておきます

Herokuにアカウントを登録

Heroku

HerokuToolbeltのインストール

アカウント作るとツールのダウンロードが出来ますが、MacならHomebrewのほうが早そうなのでbrewを使って導入します
heroku login には秘密鍵、公開鍵が必要なので事前に作っておくこと

~~~
$ brew install heroku-toolbelt
$ heroku login
~~~

Herokuへのデプロイ

gitで管理しているとこでコマンドを叩けばOK
~~~
$ heroku create
$ git push heroku master
~~~

ハマリポイント①
pushするリポジトリは master じゃないと Pushed to non-master branch, skipping build. を言われてbuildしてくれない

ハマリポイント②
ルートに composer.json を置いておいても、package.json があるとPHPのアプリと思ってくれずにNode.jsとしてbuildしようとしてコケる。
なにか回避方法があるのでしょうか?
~~~
—–> Node.js app detected

PRO TIP: Specify a node version in package.json
See https://devcenter.heroku.com/articles/nodejs-support

—–> Defaulting to latest stable node: 0.10.30
—–> Downloading and installing node
—–> Exporting config vars to environment
—–> Installing dependencies
npm WARN package.json [email protected] No description
npm WARN package.json [email protected] No README data
—–> Cleaning up node-gyp and npm artifacts
—–> Procfile not found and npm start script is undefined

PRO TIP: Create a Procfile or specify a start script in package.json
See https://devcenter.heroku.com/articles/nodejs-support

—–> Building runtime environment
—–> Discovering process types
Procfile declares types -> (none)

—–> Compressing… done, 15.5MB
~~~

Herokuでかくにん!

~~~
$ heroku open
~~~

ハマリポイント③
こんなログが出てエラー画面しか出ない
~~~
$ heroku logs –tail
2014-08-10T06:08:42.959681+00:00 heroku[router]: at=error code=H14 desc=”No web processes running” method=GET path=”/favicon.ico” host=ancient-peak-****.herokuapp.com request_id=**** fwd=”****” dyno= connect= service= status=503 bytes=
~~~

heroku scale web=0
heroku scale web=1
とする事により、起動するようになった。
起動しなくなった原因は不明

herokuでerror H14 – Qiita

よくわかんないけど、これで動いた

ハマリポイント④
PHPのエラーログや、アプリで出力しているエラーログファイルはHerokuの特性上見ることが出来ません
display_errorsをOnに最初はしておくほうが懸命です
~~~
display_errors = On
~~~

ドキュメントルートの変更

Procfile をリポジトリのルートに設置すると変更できる
nginxを使いたい場合なんかもこのファイルで設定する
~~~
web: vendor/bin/heroku-php-apache2 html/
~~~

PostgreSQL

Herokuでは無料でPostgreSQLが使える
~~~
$ heroku addons:add heroku-postgresql
~~~

~~~
$ heroku config | grep DATABASE_URL
DATABASE_URL: postgres://[username]:[password]@[hostname]:[port]/[database]
~~~
DATABASE_URLという環境変数に接続情報が入っているので、これを使えばアレコレ出来る
もちろん、ダッシュボードからも確認できる

概ね、Getting Started with PHP on Heroku | Heroku Dev Centerを見ればわかるとは思います