Zwischen Proberaum und Bühne

Veränderungen an einer bestehenden SilverStripe Applikation sollten immer erst getestet werden, bevor man sie auf den Server überträgt. Nichts kostet mehr Kundenvertrauen, als eine Webseite die plötzlich nicht mehr sauber funktioniert. Der Kunde oder Benutzer hat natürlich keine Einblicke hinter die Fassade einer Webseite. Deshalb können kleine Risse in der Fassade das Vertrauen in das ganze Haus erschüttern.
Getestet wird auf einem Staging-Server oder auf dem Localhost des Entwicklerrechners. Das Entwicklungssystem hat aus Gründen der Vorsicht eine eigene Datenbank.

Des Pudels Kern

Die Definition der zu benutzenden Datenbank findet in SilverStripe bekanntlich in der _config.php statt. Diese muss man spätestens dann vom localhost auf den Server übertragen, wenn man Konfigurationsänderungen vorgenommen hat, wie etwa die Aktivierung einer Extension oder ähnlichem. Jetzt kopiert man natürlich auch die Datenbankzugangsdaten mit und rien ne va plus.

Die Lösung

SilverStripe ist eine gute Firma. Deshalb hatten sie schon eine Lösung bereit, bevor ich mir des Problems bewusst wurde.
Es gibt eine Möglichkeit, die Serverzugangsdaten so auszulagern, dass sie weder beim Upload noch beim Commit in die Versionsverwaltung mit übertragen werden. Der Weg dahin ist nicht ganz so einfach, bringt aber doch so viele Vorteil mit, dass er eine gute Alternative darstellt.
Als erstes muss im Rootverzeichnis des Servers jeweils eine neue Datei namens „_ss_environment.php“ angelegt werden. Diese hat folgenden Inhalt:

<?php
/* Entwicklungsmodus des Systems: entweder dev, test oder live */
define('SS_ENVIRONMENT_TYPE', 'dev/test/live');
 
/* Hier werden die Zugangsdaten zur Datenbank definiert */
define('SS_DATABASE_SERVER', 'localhost');
define('SS_DATABASE_USERNAME', 'root');
define('SS_DATABASE_PASSWORD', '');
 
/* Default-User definieren. Sollte im live System nicht gesetzt sein; */
define('SS_DEFAULT_ADMIN_USERNAME', 'username');
define('SS_DEFAULT_ADMIN_PASSWORD', 'password');

Jetzt muss natürlich noch die _config.php umgebaut werden, denn die alten Zugangsdaten müssen ja dynamisiert werden. Dazu muss man folgende Zeilen löschen:

global $databaseConfig;
$databaseConfig = array(
      "type" => 'MySQLDatabase',
      "server" => 'localhost',
      "username" => 'root',
      "password" => 'password',
      "database" => 'database',
      "path" => '',
);

Director::set_dev_servers(array(
      'localhost',
      '127.0.0.1'
));

Ausserdem muss natürlich die Zeile für den Default User weg.
Folgende Zeilen ersetzen nun die $databaseConfig:

global $database;
$database = '(databasename)';
 
/* Diese Datei handhabt jetzt die Dynamisierung der Zugangsdaten */
require_once("conf/ConfigureFromEnv.php");

Die Gratisbeigabe

Auf diese Weise kann man natürlich die Datenbankzugangsdaten für alle SilverStripe Installationen auf dem Localhost festlegen und kann auf das Installationsskript verzichten. Ausserdem kann man so den Developement Mode für Localhost und Server getrennt festlegen.

Tags: