5 Stimmen

Ansatz für "Website wegen Wartungsarbeiten außer Betrieb"

Ich verwende Joomla und ich liebe die Möglichkeit, die Website für Wartungsarbeiten herunterzufahren. Wie ich gesehen habe, werden alle Anfragen an die Website, wenn sie sich im Wartungsmodus befindet, auf eine einzige Seite umgeleitet. Wie kann ich mein eigenes Modul für das Herunterfahren der Website wegen Wartungsarbeiten für eine Nicht-Joomla-Site hinzufügen? Ich verwende ein MVC-Framework in PHP mit dem Namen Kohana in der Version 2, das mit Codeigniter vergleichbar ist. Ich habe eine Router-Klasse, in der ich steuern kann, wohin eine bestimmte Adresse geht. Der einzige Ansatz, den ich denken kann, ist, jede Anfrage an eine bestimmte Controller-Funktion umzuleiten, wenn die Website nicht verfügbar ist, aber wie mache ich das? Ich kann nicht möglicherweise manuell alle Urls richtig umleiten?

9voto

Lawrence Barsanti Punkte 29613

Werfen Sie einen Blick auf die Streckenführung Dokumentation . Sie sollten in der Lage sein, einen regulären Ausdruck zu verwenden, der jede Uri an einen bestimmten Controller/Aktion umleitet. Die einzige Frage, die bleibt, ist, wie man diese Regel ein- und ausschaltet.

6voto

Lukman Punkte 17776

Kohana 3 : Sie können eine Catch-all-Route in Ihrem bootstrap.php vor dem Kohana::modules() Zeilen:

if (/* check if site is in under maintenance mode */) {
    Route::set('defaulta', '(<id>)', array('id' => '.*'))
        ->defaults(array(
            'controller' => 'errors',
            'action'     => 'maintenance',
        ));
}

Oder Sie können sogar die Anfrage so manipulieren, dass sie dasselbe tut:

if (/* check if site is in under maintenance mode */) {
    echo Request::factory('errors/maintenance')
        ->execute()
        ->send_headers()
        ->response;
}

Kohana 2 : Sie müssten die Controller und die Anzeige der Seite "under maintenance" im Konstruktor behandeln (Sie müssen jedoch sicherstellen, dass alle Ihre Controller diese Controllerklasse erweitern und nicht die Vanilla-Klasse):

abstract class Custom_Controller extends Controller {

    public function __construct()
    {
        parent::__construct();
        if (/* check if site is in under maintenance mode */) {
            $page = new View('maintenance');
            $page->render(TRUE);
            exit;
        }
    }
}

Sie können dazu auch das Hook-System verwenden, indem Sie eine Datei in Ihrem hooks Ordner (stellen Sie sicher, dass Sie Hooks in Ihrem config.php ):

Event::add('system.ready', 'check_maintenance_mode');

function check_maintenance_mode() {
    if (/* check if site is in under maintenance mode */) {
        Kohana::config_set('routes', array('_default' => 'errors/maintenance'));
    }
}

Wie Sie sehen können, gibt es tatsächlich viele Möglichkeiten, wie man etwas in Kohana machen kann, weil es ein sehr flexibles PHP-Framework ist :)

2voto

Dominic Rodger Punkte 93942

Sie könnten ein Datenbankflag in einem gemeinsamen Header überprüfen (vermutlich haben Sie ein gemeinsames Include, das eine Verbindung zur Datenbank herstellt usw.), und wenn das Flag gesetzt ist, eine bestimmte Seite rendern und beenden (wobei Sie sicherstellen, dass Sie alle üblichen Aufräumarbeiten wie das Schließen von Datenbankverbindungen usw. durchführen).

1voto

leepowers Punkte 36580

Läuft bei Ihnen Apache? Fügen Sie dies zu Ihrem .htaccess Datei in Ihrem Web Root (oder in der vhost-Deklaration für die Site), um ALLE Anfragen auf eine "under maintenance"-Seite umzuleiten:

Redirect 301 / /maintenace_page.html

0voto

Abinadi Punkte 660

Mir fallen zwei Ideen ein, um dies zu erreichen.

  1. Wie Larry sagte, verwenden Sie reguläre Ausdrücke, um alle Anfragen an einen bestimmten Ort umzuleiten. Sie würden also zunächst feststellen, ob sich die Website im Wartungsmodus befindet (wahrscheinlich mithilfe eines Datenbankflags oder einer Konfigurationsdateieinstellung), und dann, wenn dies der Fall ist, die Routing-Funktion für reguläre Ausdrücke verwenden, um den gesamten Datenverkehr an einen Ort umzuleiten.

  2. Sie könnten im Konstruktor jedes Controllers prüfen, ob sich die Site im Wartungsmodus befindet, und bei Bedarf eine Umleitung vornehmen. Dies ist wahrscheinlich nicht die optimalste Lösung, da Sie denselben Code für jeden Controller wiederholen würden. Obwohl es also funktionieren würde, wären Sie mit den regulären Ausdrücken wahrscheinlich besser dran.

Routenplanung in Kohana: http://docs.kohanaphp.com/general/routing

PHP Reguläre Ausdrücke: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

Kontrolleure in Kohana: http://docs.kohanaphp.com/general/controllers

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X