Laravelをherokuにデプロイしてみる(無料)。herokuはインストールされている前提。


とりあえずログイン

heroku login

プロジェクトを作る(自分はbias-check)という名前でプロジェクトを作りました。その都度変えて実行して下さい。あと、実行したいディレクトリで以下コマンド実行します。

heroku create bias-check --buildpack heroku/php

Laravelプロジェクトがあるとしてコミットします。

git add .
git commit -m "first-commit"

これ結構大事なんですが、リモートリポジトリを追加して下さい。

git remote heroku https://git.heroku.com/bias-check.git

一応 git remote しておきます。

git remote
heroku  https://git.heroku.com/bias-check.git (fetch)
heroku  https://git.heroku.com/bias-check.git (push)

いいと思います。

クレジットカードの登録

HerokuでMySQLを利用する場合、Clear DBというアドオンを追加する必要があります。
無料版の場合でもアドオンの追加にはクレジットカードの登録が求められるので、以下URLから登録しておきましょう。

登録が完了したら以下を実行します。無料枠ですね。

heroku addons:add cleardb

Dashboard/apps の一覧を確認すると以下が表示されます。

データベースの接続先をClearDBに指定

データベース情報を確認します。
※これ結構大事!!

heroku config | grep CLEARDB_DATABASE_URL

以下表示されますのでメモりましょう。

CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true

環境変数を設定します。

heroku config:set DB_DATABASE=[データベース名]
heroku config:set DB_HOST=[ホスト名]
heroku config:set DB_USERNAME=[ユーザー名]
heroku config:set DB_PASSWORD=[パスワード]

MySQLのインデックス用の文字列長の指定

よくわかんないですけど、これやんないとダメみたいです。

バージョン確認すると5.5系なので文字列長の指定が必要になります。以下のコマンドでは自分の場合zsh: command not found: mysql
となりました、、

mysql -h <ホスト> -u <ユーザー名> -p -D <データベース名>

兎にも角にもapp/Providers/AppServiceProvider.php を以下のように編集すればOKです。
追加すれば良いようのなので実行します。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
//追加
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //追加
        Schema::defaultStringLength(191);
    }

git push heroku master:master
heroku run php artisan migrate

とりあえずこれでmigration完了。

続きましてwebサーバーの設定となります。

Apacheの設定

herokuでApacheを利用するにはProfileが必要となります。
ファイルはプロジェクト直下に配置するといいと思います。

Procfile

web: vendor/bin/heroku-php-apache2 public/

※これだけでapacheの設定ができるのでとても簡単なのでいいですね。詳細は割愛します。

しかしアクセスするもこのままだとファイルを表示してくれません。

要約すると管理者はheroku logs --tailで確認してみろよーて事でしたので、
早速確認してみるとheroku-php-apache2が無いという事らしい。

 bash: vendor/bin/heroku-php-apache2: No such file or directory

考えてみるとvendorフォルダって.gitignoreでgitの管理下に置かれないからpushできないじゃん、、
pushされて無いってことはないのか、無いなら作ってしまえばいいですねはい。
とりあえずherokuコマンドcomposerを実行すればvenderが作られるなり更新するなりするだろうという希望的観測です。

 heroku run composer update

composer.jsonのconfig内に以下があるか追加されているか確認して下さい。

"bin-dir": "vendor/bin",

Laravelのダッシュボードを確認すると追加されているのもわかりますし、接続もできます。( Laravelのwelcomeページかっけー)

apache2はclear dbの下らへんにあります。

デプロイ方法は以上です。エラーが出ると面倒ですが慣れれば簡単ですね。vpsなどと違って楽でいいです。