Laravelをherokuにデプロイする(データベースはPostgreSQL)

## プロジェクトファイルのPathに移動する

```terminal
$ cd (プロジェクトのディレクトリ)
```

## Laravelプロジェクトファイルを作成

ディレクトリでLaravelをインストールする(今回はLaravel 5.5系で行う)

```terminal
$ composer create-project --prefer-dist laravel/laravel HerokuLaravel "5.5.*"
```

```terminal
$ cd HerokuLaravel
```

## herokuにログイン

```terminal
$ heroku login
```

```terminal
# Email: $ xxx@gmail.com
```

```terminal
# Password:  $ *******

Logged in as xxx@gmail.com
```

## herokuにLaravelアプリのためのアプリを作成

herokuアプリを作成する

```terminal
$ heroku create laravel-mysql --buildpack heroku/php
```

`heroku-laravel`がherokuで表示されるアプリ名

```terminal
$ git init
$ heroku git:remote -a <herokuのアプリ名>
$ git add .
$ git commit -m "make it better"
$ git push heroku master
```

## ターミナルからherokuアプリを開く

```terminal
$ heroku open
```
サイト表示。 (ただし、エラーです)

## Heroku Procfileの作成

用途がよくわかりませんが、プロジェクト直下にProcfileを作成

```terminal
$ touch Procfile
```
`HerokuLaravel`のプロジェクトファイルに`Profile`が作成される。  
`Procfile`をそのまま編集します。(ファイルの中身は空でした)

```Procfile.txt
web: vendor/bin/heroku-php-apache2 public/
```

`Procfile.txt`ではないが便宜上。
そのあと、もう一度herokuに変更点をプッシュする

```terminal
$ git add -A .
$ git commit -m "Add Procfile"

[master 32ec3cc] Add Procfile
 1 file changed, 1 insertion(+)
```

```terminal
$ git push heroku master

Counting objects: 3, done.
```

## herokuのアドオンにPostgreSQLを作成する

```terminal
$ heroku addons:create heroku-postgresql:hobby-dev
```

## 各種設定

編集リクエスト頂いて初めて知りました。2パターンあります。

- 1. 一括設定 (@SUZUKI_Masaya さんより)
- 2. 個別設定

### 一括設定の場合

```terminal
$ heroku config:set DB_CONNECTION=pgsql $(heroku config:get DATABASE_URL | awk '{print gensub(/postgres:\/\/(.+):(.+)@(.+):5432\/(.+)/, "DB_USERNAME=\"\\1\" DB_PASSWORD=\"\\2\" DB_HOST=\"\\3\" DB_DATABASE=\"\\4\"", "g")}')


[結果]
Setting　XXX
```

### 個別設定の場合

```terminal
$ heroku config:get DATABASE_URL

# メモしよう
postgres://<ユーザ名>:<パスワード>@<ホスト>:5432/<DB名>
```

```terminal
$ heroku config:set DB_CONNECTION=pgsql
$ heroku config:set DB_HOST=<ホスト>
$ heroku config:set DB_DATABASE=<DB名>
$ heroku config:set DB_USERNAME=<ユーザ名>
$ heroku config:set DB_PASSWORD=<パスワード>

[結果]
Setting　XXX
```


## DBのマイグレーション

`Do you really wish to run this command? (yes/no) [no]`で止まったら `y`or`yes`を入力してEnter。

```terminal
$ heroku run php artisan migrate

 Do you really wish to run this command? (yes/no) [no]:
 > y 

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
```

マイグレーションをやり直したい場合

```terminal
# (マイグレーションをやり直したい場合)
> heroku run php artisan migrate:refresh --seed
```

## アプリの情報を設定する

```terminal
$ heroku config:set DEBUGBAR_ENABLED=true
$ heroku config:set APP_KEY=$(php artisan key:generate --show)
```

## サイトを表示

```terminal
$ heroku open
```

これで行けると思います。

## herokuへのアップデート

次からリリースのたびにherokuにソースコードやDBをpushしたい場合は

```terminal
# ソースコードをあげる
$ git add -A .
$ git commit -m "コミットメッセージ"
$ git push heroku master

# DBに変更があった場合
# マイグレーションとシーディングを実行
$ heroku run php artisan migrate --seed
```

で更新できる。

２、３度失敗したため、本番で失敗したくないのでメモがわりに残します。
次はMySQLでの設定方法をなんとかしたい(願望)。

### 補足

こちらを参考にされる方はこのやり方の賞味期限はだいたい3ヶ月なのでそれを過ぎるとこれで出来るかは保証できませんのでまたググってください。