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が実行できるのだからもちろん実行可能です。ということは、メンテナンス中においてクロンのサービスをいったん止めることも必要かもしれません。ご注意を。
メルマガ購読の申し込みはこちらから。