laravel Webサイトで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');
});
これはLaravel 4.1以下用
Laravel 5ダウンファイルはstorage/framework/down
にあります-@ruuterに感謝します。
ArtisanのDownCommand
クラスを見ると、app/storage/meta
フォルダー内に新しいファイルが作成されているようです。
ここにDownCommand
fire
メソッドがあります。
public function fire()
{
touch($this->laravel['path.storage'].'/meta/down');
$this->comment('Application is now in maintenance mode.');
}
そして、対応するUpCommand
fire
メソッド。
public function fire()
{
@unlink($this->laravel['path.storage'].'/meta/down');
$this->info('Application is now live.');
}
これらのファイルはvendor/laravel/framework/src/Illuminate/Foundation/Console
にあります。
具体的には、app/storage/meta
にdown
というファイルを作成します。
これらのコマンドを複製するための承認済みルート/コントローラーアクションを作成できます。
以下のSjaak Trekhaaのコメントに注意してください。これは、私が思い出した今私が使用する方法です!
これをウェブ上のすべての人に公開したかっただけですが、php artisan down
が行うことは、「[down]」と呼ばれるapp/storage/meta
ディレクトリ内の空のファイルをタッチ(作成)することだけです。このファイルが存在する場合、アプリケーションはメンテナンスモードです。これですべてです。
// From vendor\laravel\framework\src\Illuminate\Foundation\Application.php
public function isDownForMaintenance()
{
return file_exists($this['config']['app.manifest'].'/down');
}
したがって、ファイルをアップロードできる場合は、「down」という名前の空のファイルをapp/storage/meta
にアップロードするだけです。
ダウンはstorage/framework/down
にあります
Ruuterに感謝します。
質問に対する実際の正しい答えは、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'));
}
}
_
注:function
isBackendRequest()
は、管理者の場合、true
またはfalse
を返しますprefix(true
)またはログインしようとしています(true
)またはその他(false
)
_App/Http/Kernel.php
_を開き、ファンデーションミドルウェアを新しいミドルウェアで書き換えます
_protected $middleware = [
\App\Http\Middleware\CheckForMaintenanceMode::class,
];
_
アプリケーションがメンテナンスモード(ダウン)の場合でも、ログインページや_admin/*
_ページにアクセスできます。
_Route::group(['middleware' => 'auth', 'prefix' => 'admin'], function () {
//admin routes
});
_
laravel 5.6では、「ダウン」ファイルの場所が少し移動しました。
新しい場所は次のとおりです。
./storage/framework/down
Laravel 5.6は「ダウン」ファイルにいくつかのコンテンツを追加しましたが、空のファイルもまだ有効です。デフォルトでは、「503 Service Unavailable」ページが表示されます。
終了したら、「ダウン」ファイルを削除するだけです。