HerokuでLumen + Postgres.

# HerokuにLumen+Postgresの環境を作ってみる。

## 前提条件
- ブラウザからherokuへログインして「fooo」というアプリ作成済み。

## Lumenインストール
Composerでローカルに落とす。

~~~
% composer create-project laravel/lumen --prefer-dist herokuLumenTest
~~~

## Herokuへデプロイ

### Procfile追加
~~~
% cd herokuLumenTest
% vi Procfile
~~~

~~~ text:Procfile 
vendor/bin/heroku-php-apache2
~~~

### Herokuログイン
~~~
% heroku login
Enter your Heroku credentials.
Email: hoge@hoge.com
Password (typing will be hidden): 
Authentication successful.
~~~

### Commitする
~~~
% git init
% heroku git:remote -a fooo
% git add .
% git commit -am '1st commit.'
% git push heroku master
~~~

https://fooo.herokuapp.com/　
Lumen画面表示確認。

## DB

### heroku-postgresでDB作る
Herokuのサイトで作る。

### DB情報をHeorokuに設定
~~~
% heroku config:add DB_HOST=ec2-000-00-000-000.compute-0.amazonaws.com
% heroku config:add DB_DATABASE=databasename                        
% heroku config:add DB_USERNAME=username
% heroku config:add DB_PASSWORD=password
% heroku config
=== fooo Config Vars
DB_CONNECTION: pgsql
DB_HOST:       ec2-000-00-000-000.compute-0.amazonaws.com
DB_DATABASE:   databasename
DB_PASSWORD:   username
DB_USERNAME:   password
~~~

#### Migrate作成
~~~
# heroku run php artisan migrate:install
~~~

### Postgres用のGUIアプリをインストール

[pgAdmin3 MacOSX版](http://www.pgadmin.org/download/macosx.php)をインストール

#### 設定

ファイル->サーバーの追加

![スクリーンショット 2015-05-26 14.02.08.png](https://qiita-image-store.s3.amazonaws.com/0/9907/db6465fe-a377-5920-50ea-574df138e01f.png)

接続してみるとmigrationsテーブルができているのが確認できる。

![スクリーンショット 2015-05-26 15.21.52.png](https://qiita-image-store.s3.amazonaws.com/0/9907/81c9e940-c7da-3a58-470f-bb017ecbfb04.png)

### マイグレーションファイル作成(ローカルに作る)
~~~
php artisan make:migration create_customers_table
~~~

database/migrationsにマイグレーションファイルができるので編集

~~~ php:2015_05_26_053458_create_customers_table.php
	public function up()
	{
		Schema::create('customers', function(Blueprint $table)
		{
			$table->increments('id');
			$table->integer('user_id');
			$table->string('name');
			$table->string('memo');
			$table->timestamps();
		});
	}

	public function down()
	{
		Schema::drop('customers');
	}
~~~

### Seederファイル作成

~~~
vi database/seeds/CustomerTableSeeder.php
~~~

~~~ php:CustomerTableSeeder.php
<?php

use Illuminate\Database\Seeder;
use App\Customer;

class CustomerTableSeeder extends Seeder {

    public function run()
    {
        DB::table('customers')->delete();
        Customer::create(['user_id' => 1, 'name' => '田中', 'memo' => '高岡市在住']);
    }

}
~~~

~~~
database/seeds/DatabaseSeeder.php
~~~

~~~ php:DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder {

	/**
	 * Run the database seeds.
	 *
	 * @return void
	 */
	public function run()
	{
		Model::unguard();
		$this->call('CustomerTableSeeder');
	}

}
~~~

### Customerクラス作成

~~~
vi app/Customer.php
~~~

~~~ php:Customer.php
<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model {
	/**
	 * The database table used by the model.
	 *
	 * @var string
	 */
	protected $table = 'customers';

	/**
	 * The attributes that are mass assignable.
	 *
	 * @var array
	 */
	protected $fillable = ['name', 'memo'];
}
~~~

### Herokuへデプロイ&マイグレーション実行
~~~
% git push heroku master
% heroku run php artisan migrate:refresh --seed
~~~

![スクリーンショット 2015-05-26 16.31.39.png](https://qiita-image-store.s3.amazonaws.com/0/9907/526a8169-560c-1990-2ce5-1cc5a13f3ef3.png)