Artisanを使用せずにlaravel Webサイトでメンテナンスモードをアクティブにする方法があるかどうか、誰かが知っているかどうか疑問に思っていますか? サーバーへのコマンド ライン アクセス権がないため、まずローカル サイトで Artisan を更新してから変更をサーバーにプッシュしないと、Artisan を使用できません。他のルートへのアクセスを拒否する、追加できるマスタールートはありますか?
ありがとう!
アプリケーションから artisan を呼び出すだけです。
Artisan::call('down');
Artisan::call('up');
ただし、アプリがダウンしているため、アプリを起動するためのアクセス権がないためです。機能を自分で作成できます。
シャットダウンするためのルート。これを行うには、ユーザーを認証する必要があります。
Route::group(array('before' => 'auth'), function()
{
Route::get('shut/the/application/down', function()
{
touch(storage_path().'/meta/my.down');
});
});
それを元に戻すルート:
Route::get('bring/the/application/back/up', function()
{
@unlink(storage_path().'/meta/my.down');
});
稼働しているかどうかを確認するフィルター:
Route::filter('applicationIsUp', function()
{
if (file_exists($this['path.storage'].'/meta/my.down'))
{
return Redirect::to('site/is/down');
}
});
それを元に戻すルート:
Route::get('bring/the/application/back/up', function()
{
@unlink(storage_path().'/meta/my.down');
});
サイトがダウンしているときにきれいなビューを表示するルート
Route::get('site/is/down', function()
{
return View::make('views.site.down');
});
質問に対する真の正解は、Antonio によって提供された上記のものです。
アプリケーションから artisan を呼び出すだけです。
Artisan::call('down'); Artisan::call('up');
ミドルウェアは Laravel 5 で導入されたので、Laravel 5.3 アプリケーションでのミドルウェアの使用方法について説明します。
まず、新しいミドルウェアを作成しましょう$php artisan make:middleware CheckForMaintenanceMode
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Http\Exceptions\MaintenanceModeException;
class CheckForMaintenanceMode
{
protected $app;
public function __construct(Application $app)
{
$this->app = $app;
}
public function handle($request, Closure $next)
{
if ($this->app->isDownForMaintenance() && !$this->isBackendRequest($request)) {
$data = json_decode(file_get_contents($this->app->storagePath() . '/framework/down'), true);
throw new MaintenanceModeException($data['time'], $data['retry'], $data['message']);
}
return $next($request);
}
private function isBackendRequest($request)
{
return ($request->is('admin/*') or $request->is('login'));
}
}
注:または、管理者プレフィックスにいる場合()、ログインしようとしている場合( )、またはその他()
isBackendRequest()
を返す関数true
false
true
true
false
App/Http/Kernel.php
新しいミドルウェアで基礎ミドルウェアを開き、書き直す
protected $middleware = [
\App\Http\Middleware\CheckForMaintenanceMode::class,
];
アプリケーションがメンテナンス モード (ダウン) の場合でも、ログイン ページまたは任意のadmin/*
ページにアクセスできます。
Route::group(['middleware' => 'auth', 'prefix' => 'admin'], function () {
//admin routes
});