web-dev-qa-db-de.com

Richten Sie 3 Standorte ein, um eine Verbindung zu 1 Datenbank herzustellen und Daten freizugeben

Wie richte ich drei verschiedene Wordpress-Installationen auf drei verschiedenen Servern ein, die alle eine Verbindung zu einer einzelnen Datenbank herstellen und dieselben Daten gemeinsam nutzen?

Ich möchte 3 verschiedene Server einrichten. Eine für Entwicklung, Qualitätssicherung/Inszenierung und Produktion. Jede Site sollte von der anderen isoliert sein und sie werden einfach dazu verwendet, die gleichen Daten aus der Datenbank anzuzeigen. Dies bedeutet:

  • Entwickler werden auf dem Entwicklungsserver arbeiten, was bedeutet, dass sich diese Installation ständig ändert.
  • Der QA/Staging-Server befindet sich in einem veränderten Zustand, da die QA-Mitarbeiter die vom Entwicklungsteam hinzugefügten Funktionen testen werden.
  • Die Produktion wird nur regelmäßig über den getesteten und funktionierenden Code aktualisiert, der über den QA/Staging-Server überprüft wird

Bitte beachten Sie, dass das Teilen von "Upload" -Ressourcen kein Problem darstellt, da ich beabsichtige, alle meine Ressourcen (z. B. Bilder) mithilfe des AWS S3-Dienstes zu speichern und gleichzeitig AWS CloudFront als Server zu verwenden CDN, um alle genannten Ressourcen zu bedienen.

1
Corey

Um auf meinen Vorschlag näher einzugehen, hier ist ein Arbeitscode:

// hook in before theme is loaded
add_action('plugins_loaded','custom_maybe_switch_themes');
function custom_maybe_switch_themes() {
    if (!is_user_logged_in()) {return;}
    if (!current_user_can('manage_options')) {return;}

    // check for query request eg. ?usertheme=theme-slug
    if (isset($_REQUEST['usertheme'])) {
        // sanitize request
        $usertheme = strtolower(sanitize_title($_REQUEST['usertheme']));
        global $current_user; $current_user = wp_get_current_user();

        // maybe reset user meta stylesheet
        if ($usertheme == 'reset') {delete_user_meta($current_user->ID,'stylesheet'); return;}

        // validate theme
        $theme = wp_get_theme($usertheme);
        if ($theme->exists()) {
             delete_user_meta($current_user->ID,'stylesheet');
             add_user_meta($current_user->ID,'stylesheet',$usertheme);
        }
    }
}

// add filter to stylesheet option
add_filter('pre_option_stylesheet', 'get_user_stylesheet');
function get_user_stylesheet($stylesheet) {
    if (!is_user_logged_in()) {return $stylesheet;}
    if (!current_user_can('manage_options')) {return $stylesheet;}

    // check user meta stylesheet
    global $current_user; $current_user = wp_get_current_user();
    $userstylesheet = get_user_meta($current_user->ID,'stylesheet',true);
    // if we have a value use it instead
    if ($userstylesheet) {return $userstylesheet;}
    return $stylesheet;
}

Verwenden Sie ?usertheme=theme-slug, um auf Benutzerbasis zu einem Thema zu wechseln.

... und zum Zurücksetzen einfach ?usertheme=reset verwenden

Da der gesamte Themencode geladen istabhängig vom verwendeten Stylesheet, können Sie untergeordnete Themenverzeichnisse für Live, Staging und Development (mit derselben übergeordneten Vorlage) einrichten und zwischen diesen wechseln Themen wirklich einfach als Entwickler und sehen die Ergebnisse sofort auf der gleichen Domain. :-)

Die einzige Einschränkung, die ich mir vorstellen kann, ist das Testen wichtiger Plugin-Updates. Zu diesem Zweck benötigen Sie immer noch eine Entwicklungsumgebung und können die Datenbank synchronisieren, um sie mit dem aktuellen Datenbankinhalt zu testen. Dies liegt nur daran, dass Sie nicht wissen, ob sie die Tabellenstruktur der Optionsdatenbank ändern werden (obwohl dies selten vorkommt, gibt es kein Zurück, sodass Sie eine Live-Site auf diese Weise beschädigen können.)

Zum Testen der Site-Ausgabe fürabgemeldete Benutzerwäre etwas weiter erforderlich, dies könnte jedoch mit einer anderen Abfragezeichenfolge für einmalige Ladevorgänge oder mit Cookies anstelle von Benutzern erfolgen Meta für ein ähnliches anhaltendes Ergebnis.

Wie auch immer, der Vorteil, dass Code-Snippets in Dateien organisiert sind, um sie in der Entwicklung zu testen und in derselben Domäne bereitzustellen, sodass das Übertragen neuer Änderungen zwischen ihnen wirklich einfach ist und Sie sich nicht die ganze Zeit über die Synchronisierung von Datenbanken sorgen müssen (obwohl das eine andere ist) praktikabler Ansatz) macht dies zu einer sehr bequemen Möglichkeit, Dinge zu tun, die ich denke.

0
majick

Sie können Subdomains für Ihre Entwickler- und QA-Installationen verwenden. Wie z. B. qa.domain.com und dev.domain.com. Beim Anlegen der Subdomains werden in der Regel auch Unterverzeichnisse angelegt. Sie können in jedem Subdomains-Verzeichnis ein zusätzliches WordPress installieren. Dann erstellen Sie 2 zusätzliche Datenbanken. Sichern Sie die Produktionsdatenbank und laden Sie sie in die 2 neuen Datenbanken. Richten Sie Ihre config.php-Dateien für diese neue Datenbank ein und Sie haben 2 neue Server. Sie müssen einige Aktualisierungen an den Datenbanken vornehmen. Mindestens zwei Speicherorte home und site_url in der Tabelle _options. Normalerweise öffne ich die .sql-Datei in einem Texteditor und ersetze domain.com durch sub.domain.com.

0
stoi2m1