30

Artisanを使用せずにlaravel Webサイトでメンテナンスモードをアクティブにする方法があるかどうか、誰かが知っているかどうか疑問に思っていますか? サーバーへのコマンド ライン アクセス権がないため、まずローカル サイトで Artisan を更新してから変更をサーバーにプッシュしないと、Artisan を使用できません。他のルートへのアクセスを拒否する、追加できるマスタールートはありますか?

ありがとう!

4

5 に答える 5

55

アプリケーションから 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');
});
于 2014-01-10T15:14:45.893 に答える
7

質問に対する真の正解は、Antonio によって提供された上記のものです。

アプリケーションから artisan を呼び出すだけです。

Artisan::call('down');

Artisan::call('up');

ララベル 5+

ミドルウェアは 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()を返す関数truefalsetruetruefalse

グローバルミドルウェアを置き換える

App/Http/Kernel.php新しいミドルウェアで基礎ミドルウェアを開き、書き直す

protected $middleware = [
    \App\Http\Middleware\CheckForMaintenanceMode::class,
];

アプリケーションがメンテナンス モード (ダウン) の場合でも、ログイン ページまたは任意のadmin/*ページにアクセスできます。

Route::group(['middleware' => 'auth', 'prefix' => 'admin'], function () { 
    //admin routes
});  
于 2016-08-08T19:13:40.380 に答える