Je me demande simplement si quelqu'un sait s'il existe un moyen d'activer le mode de maintenance sur un site Web laravel sans utiliser Artisan? Je n'ai pas accès en ligne de commande au serveur, donc je ne peux pas utiliser Artisan sans d'abord le mettre à jour sur mon site local, puis pousser les modifications sur le serveur. Y a-t-il peut-être une route principale que je peux ajouter qui refusera l'accès à toute autre route?
Merci!
Vous pouvez simplement appeler artisan depuis votre application:
Artisan::call('down');
Artisan::call('up');
Mais puisque vous n'aurez pas accès à votre application, car elle est en panne. Vous pouvez créer la fonctionnalité vous-même:
Une route pour l'arrêter, l'utilisateur doit être authentifié pour ce faire:
Route::group(array('before' => 'auth'), function()
{
Route::get('shut/the/application/down', function()
{
touch(storage_path().'/meta/my.down');
});
});
Un itinéraire pour le remonter:
Route::get('bring/the/application/back/up', function()
{
@unlink(storage_path().'/meta/my.down');
});
Un filtre pour vérifier s'il est en place:
Route::filter('applicationIsUp', function()
{
if (file_exists($this['path.storage'].'/meta/my.down'))
{
return Redirect::to('site/is/down');
}
});
Un itinéraire pour le remonter:
Route::get('bring/the/application/back/up', function()
{
@unlink(storage_path().'/meta/my.down');
});
Un itinéraire pour afficher une jolie vue lorsque votre site est en panne
Route::get('site/is/down', function()
{
return View::make('views.site.down');
});
C'est pour Laravel 4.1 et ci-dessous
Le fichier de téléchargement de Laravel 5 est dans storage/framework/down
- merci @ruuter.
En jetant un œil à la classe DownCommand
pour Artisan, il semble créer un nouveau fichier dans la app/storage/meta
dossier.
Voici la méthode DownCommand
fire
.
public function fire()
{
touch($this->laravel['path.storage'].'/meta/down');
$this->comment('Application is now in maintenance mode.');
}
Et la méthode UpCommand
fire
correspondante.
public function fire()
{
@unlink($this->laravel['path.storage'].'/meta/down');
$this->info('Application is now live.');
}
Ces fichiers se trouvent dans vendor/laravel/framework/src/Illuminate/Foundation/Console
.
Il crée spécifiquement un fichier appelé down
dans app/storage/meta
.
Vous pouvez créer une action de route/contrôleur autorisée pour répliquer ces commandes.
Notez le commentaire de Sjaak Trekhaa ci-dessous, c'est la méthode que j'utiliserais maintenant que je m'en souviens!
Je voulais juste mettre ça là-bas pour tout le monde sur le web, tout php artisan down
est de toucher (créer) un fichier vide dans le app/storage/meta
répertoire appelé 'down'. Si ce fichier existe, l'application est en mode maintenance. C'est tout ce qu'on peut en dire:
// From vendor\laravel\framework\src\Illuminate\Foundation\Application.php
public function isDownForMaintenance()
{
return file_exists($this['config']['app.manifest'].'/down');
}
Donc, si vous pouvez télécharger des fichiers, tout ce que vous avez à faire est de télécharger un fichier vide nommé "down" vers app/storage/meta
.
Down est situé dans storage/framework/down
Merci ruuter.
La vraie réponse correcte à la question est fournie ci-dessus par Antonio.
Vous pouvez simplement appeler artisan depuis votre application:
Artisan::call('down'); Artisan::call('up');
Puisque les middleware (s) ont été introduits dans Laravel 5, je vais expliquer comment je le fais dans Laravel 5.3 application).
Créons d'abord un nouveau middleware $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'));
}
}
Remarque: fonction
isBackendRequest()
qui renvoietrue
oufalse
si nous sommes soit en administration préfixe (true
) ou essayez de vous connecter (true
) ou toute autre chose (false
)
Ouvrez App/Http/Kernel.php
Et réécrivez le middleware des fondations avec notre nouveau middleware
protected $middleware = [
\App\Http\Middleware\CheckForMaintenanceMode::class,
];
Si l'application est en mode maintenance (en bas), nous pouvons toujours accéder à la page de connexion ou à n'importe quelle page admin/*
.
Route::group(['middleware' => 'auth', 'prefix' => 'admin'], function () {
//admin routes
});
Dans laravel 5.6, l'emplacement du fichier "down" a légèrement bougé.
Son nouvel emplacement est:
./storage/framework/down
Laravel 5.6 a ajouté du contenu au fichier "down", bien qu'un fichier vide soit toujours efficace. Vous obtenez une page "503 Service non disponible", par défaut.
Supprimez simplement le fichier "down" lorsque vous avez terminé.