Laravelの経験が長くなると、つまり初期のバージョンから使用していると、昔のやり方しか知らずに過ごしていることがあります。以前にメンテナンス画面の裏口のポストがありますが、それはバージョン5.1の話で、大昔です。ということでやり方学びなおします。

メンテンナンス画面

プログラムの更新をインストールしたり、データベースに変更をしたりするときは、誰にも作業中にアクセスしてもらいたくありません。そのときに、以下を実行します。

$ php artisan down

これを実行すると、アクセスしてきたら、以下のような画面が表示されます。それで安心して、プログラムを更新したり、データベースを変更したり、など好き勝手なことできます。

メンテナンスが完了したら、

$ php artisan up

を実行して、皆にアクセスできるようにします。

メンテンナンス画面にメッセージを表示したいなら、

$ php artisan down --message="メンテナンス中です。午前3時に終了します。"

と実行すると以下のように、メッセージが表示されます。

便利ですね。

私がアクセスしたい

メンテナンスの間、好き勝手なことをするのはいいのですが、私自身がサイトにアクセスできないと困ります。プログラムの更新をテストすることなどができません。

特定のIPアドレスからアクセスできるようにする、つまり裏口を作る必要あります。

ここが以前(古いLaravelのバージョン)と最近のバージョンが違うところです。

$ php artisan down --message="メンテナンス中です。午前3時に終了します。" --allow=192.168.56.1

のように、–allowの引数で自分のIPアドレスを指定するだけで、私にとってはアクセス可能となります。

さらに、毎回毎回コマンドラインで指定するのが面倒なら、以前のように


namespace App\Http\Middleware;

use Closure;
use Symfony\Component\HttpFoundation\IpUtils;

use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;

class CheckForMaintenanceMode extends Middleware
{
    /**
     * The URIs that should be reachable while maintenance mode is enabled.
     *
     * @var array
     */
    protected $except = [
    	//
    ];

    protected $allowed = [
    	'192.168.56.1' // ここで許可するIPを登録
    ];

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     *
     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
     * @throws \Illuminate\Foundation\Http\Exceptions\MaintenanceModeException
     */
    public function handle($request, Closure $next)
    {
        if ($this->app->isDownForMaintenance()) {

            if (IpUtils::checkIp($request->ip(), (array) $this->allowed)) {
                return $next($request);
            }
        }

        return parent::handle($request, $next); // ここで親の関数を呼ぶ
    }
}

と編集します。

メンテナンス画面をカスタマイズしたいなら

メンテナンス画面をカスタマイズしたいなら、まず、以下を実行してブレードを作成します。

$ php artisan vendor:publish --tag=laravel-errors

resources/viewsのディレクトリにerrorsサブディレクトリが作成されて以下のファイルがコピーされます。

errors
├── 401.blade.php
├── 403.blade.php
├── 404.blade.php
├── 419.blade.php
├── 429.blade.php
├── 500.blade.php
├── 503.blade.php
├── illustrated-layout.blade.php
├── layout.blade.php
└── minimal.blade.php

メンテナンス画面のカスタマイズのために編集するファイル、503.blade.phpです。503は、Service Unavailable、つまり「サービスは利用できません」のウェブステータスです。

artisanのコマンドは実行できる?

最後に、メンテナンス中に、クロンで設定されているphp artisanのコマンドは実行されるかどうかですが、php aritsan upが実行できるのだからもちろん実行可能です。ということは、メンテナンス中においてクロンのサービスをいったん止めることも必要かもしれません。ご注意を。

By khino