LoginSignup
1
0

More than 5 years have passed since last update.

HerokuにHeroku Postgresを導入してアプリケーションを動かしてみる1

Posted at

参考文献

Laravelアプリをherokuで動かすチュートリアル
今回も上記のリンク先を参考にしてデプロイした。

PostgreSQLを導入する

command
heroku addons:create heroku-postgresql:hobby-dev
command
Creating heroku-postgresql:hobby-dev on ⬢ sholovelaravel... free
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pg:copy

一応うまくいってる?

●参考文献
【Heroku Postgresql】アドオンを追加し、テーブル操作を行う
どうもここではHeroku Postgresアドオンが自分のHerokuページに載るらしい。

スクリーンショット 2018-10-11 7.17.40.png

アドオンがあるからOKみたい!次は設定。

●参考文献
Laravel + Heroku + HerokuPostgres でDB設定をサクッと環境変数に突っ込む
これをみるとDBの設定も一瞬でできるらしい。

command
php -r 'preg_match("/^postgres:\/\/(.+?):(.+?)@(.+?):(.+?)\/(.*?)$/", `heroku config:get DATABASE_URL`, $matches); `heroku config:set DB_CONNECTION=pgsql DB_HOST=$matches[3] DB_PORT=$matches[4] DB_DATABASE=$matches[5] DB_USERNAME=$matches[1] DB_PASSWORD=$matches[2]`;'
実行結果
Setting DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD and restarting sholovelaravel... done, v7

おっできた。何か適当にアプリを作ってマイグレーションしてみよう。

マイグレーションの作成

command
php artisan make:migration create_boards_table

まずローカルでマイグレーションファイルを作成して、

マイグレーションファイル
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBoardsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('boards', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('person_id');
            $table->string('title');
            $table->string('message');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('boards');
    }
}

herokuへデプロイする。ちなみにgithubに連携するとgithubへpushすると同時にherokuにもpushするのでとても便利。

command
heroku run 'php artisan migrate'
実行結果
Running php artisan migrate on ⬢ sholovelaravel... up, run.6720 (Free)
**************************************
*     Application In Production!     *
**************************************

 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
Migrating: 2018_10_10_223310_create_boards_table
Migrated:  2018_10_10_223310_create_boards_table

テーブルできたー!!

モデルの作成

command
php artisan make:model Board

コマンドプロンプトかターミナルで実行してBoardモデルを作成する。(Board.phpの名前で作成される)

モデル内は下記の内容に書き換える。

Board.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Board extends Model
{
    protected $guarded = array('id');

    public static $rules = array(
        'person_id' => 'required',
        'title' => 'required',
        'message' => 'required'
    );

    public function getData()
    {
        return $this->id . ': ' . $this->title;
    }
}

BoardControllerの作成

command
php artisan make:controller BoardController

コマンドプロンプトかターミナルで実行してBoardコントローラーを作成する。(BoardController.phpの名前で作成される)

コントローラー内は下記の内容に書き換える。

BoardController
<?php

namespace App\Http\Controllers;

use App\Board;
use Illuminate\Http\Request;

class BoardController extends Controller
{
    public function index(Request $request)
    {
        $item = Board::all();
        return view('board.index', ['items' => $items]);
    }

    public function add(Request $request)
    {
        return view('board.add');
    }

    public function create(Request $request)
    {
        $this->validate($request, Board::$rules);
        $board = new Board;
        $form = $request->all();
        unset($form['_token']);
        $board->fill($form)->save();
        return redirect('/board');
    }
}

テンプレートの作成

./resources/views/board内に「index.blade.php」を作成する。(boardディレクトリは各自作成する。)

index.blade.php
@extends('layouts.helloapp')

@section('title', 'Board.index')

@section('menubar')
    @parent
    ボード・ページ
@endsection

@section('content')
    <table>
        <tr><th>Data</th></tr>
        @foreach ($items as $item)
            <tr>
                <td>{{$item->getData()}}</td>
            </tr>
        @endforeach
    </table>
@endsection

@section('footer')
copyright 2017 shochang
@endsection

ルート情報の記述

routesディレクトリ直下のweb.phpを更新する。
Route::get('board', 'BoardController@index');を追加する。

web.php
<?php

Route::get('board', 'BoardController@index');

Route::get('/', function () {
    return view('welcome');
});

これで「heroku open」でboardに接続すると。。。

スクリーンショット 2018-10-12 7.18.20.png

あれ出ない。。。

とっとりあえず長くなってきたので今日はここまで。次回はこの続きから

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0