In einem vergangenen Artikel habe ich es schon mal erwähnt: Meinen Webentwicklungs-Workflow habe ich so eingerichtet, dass ich meinen Kram erst mal lokal entwickle und später auf den Server schiebe. Nachdem ein Projekt dort liegt ist es aber selten abgeschlossen – oft muss man noch was ändern oder anpassen. Deshalb habe ich mal etwas recherchiert, wie man mit ExpressionEngine diese lokal-online-Workflow beibehalten kann ohne verrückt zu werden – das Ergebnis gebe ich natürlich gerne weiter.
Das Ziel ist, mit möglichst wenig manueller Anpassung eine komplette EE-Installation von der einen Umgebung (Lokal) in die andere (Server) verschieben zu können. Eine Ausnahme mache ich dabei normalerweise bei der Datenbank: Die verschiebe ich immer nur von Server zu Lokal weil ich Sachen direkt online einpflege und außerdem Inhalte von Nutzern (Kommentare, ...) verloren gehen könnten.
Also, an folgenden Stellen müssen wir Anpassungen vornehmen:
1. config.php
Pfad zur Datei: system/expressionengine/config/config.phpGeändert werden müssen hier alle Angaben, die irgendwelche Pfade angeben. Die meisten Änderungen kann man zwar auch direkt im CMS machen, aber genau das raubt uns dann wieder unsere gewünsche Flexibilität :-)
Mit folgenden Codezeilen erfragen wir uns beim Server unsere URL:
$base_url = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ?
'https' : 'http');
$base_url .= '://'.$_SERVER['HTTP_HOST'];
$system_folder = 'system';
In der ersten Zeile wird erst mal gecheckt ob eine http:// oder eine https:// Verbindung besteht, in der zweiten Zeile wird dann die eigentliche URL zusammengebaut. In der Variable $system_folder steht dann noch der Name unseres Systemordners, der lautet normalerweise „system“, sollte aber aus Sicherheitsgründen angepasst werden (Näheres dazu steht in der UserGuide).
Mit den Variablen $base_url und $system_folder können wir dann arbeiten:
// URLs anhand der $base_url konfigurieren
$config['site_url'] = $base_url;
$config['cp_url'] = $base_url . '/' . $system_folder;
$config['server_path'] = $_SERVER['DOCUMENT_ROOT'];
$config['theme_folder_url'] = $base_url . '/themes/';
$config['theme_folder_path'] = $base_url . '/themes/';
$config['tmpl_file_basepath'] = $config['server_path'] . '/' . $system_folder .
"/expressionengine/templates/";
$config['avatar_url'] = $base_url.'/images/avatars/';
$config['avatar_path'] = $config['server_path'].'/images/avatars/';
$config['photo_url'] = $base_url.'/images/member_photos/';
$config['photo_path'] = $config['server_path'].'/images/member_photos/';
$config['sig_img_url'] = $base_url.'/images/signature_attachments/';
$config['sig_img_path'] = $config['server_path'].'/images/signature_attachments/';
$config['prv_msg_upload_path'] = $config['server_path'].'/images/pm_attachments/';
Damit hätten wir alle URLs, die ExpressionEngine braucht variabel in der config hinterlegt – außer die Pfade zu unseren Bildupload-Ordnern. Dazu aber später.
2. database.php
Pfad zur Datei: system/expressionengine/config/database.phpZwei Umgebungen – zwei Datenbanken. Da nicht davon auszugehen ist, dass für beide Datenbanken auch die gleichen Zugangsdaten verwendet werden, müssen wir hier auch flexibel auf die Umgebung reagieren:
Anhand dieser Zeile...
$lokal = ($_SERVER['SERVER_ADDR'] == '127.0.0.1') ? true : false;
fragen wir zuerst mal ab, auf welchem Server wir gerade sind (der lokale Server hat immer die localhost-IP 127.0.0.1). Dann können wir mit einer simplen if-Abfrage für die unterschiedlichen Umgebungen unterschiedliche Zugangsdaten hinterlegen:
// Lokal oder Server:
if($lokal)
{
$db['expressionengine']['username'] = "username_lokal";
$db['expressionengine']['password'] = "passwort_lokal";
$db['expressionengine']['database'] = "datenbankname_lokal";
} else
{
$db['expressionengine']['username'] = "username_online";
$db['expressionengine']['password'] = "passwort_online";
$db['expressionengine']['database'] = "datenbankname_online";
}
3. Pfade für Bildupload-Ordner
Wie oben schon erwähnt, sind die Pfade zu unseren Bilderordnern leider fest in der Datenbank verankert, wir können sie nicht über die config.php beeinflussen. Die Lösung hier ist, diese Pfade einfach relativ anzugeben.
bei mir stehen die beispielsweise so drin:
../images/uploads/bildordner/
Die zwei Punkte springen erst mal ein Verzeichnis höher (ausgehend von der CP-URL http://www.domain.de/system) und dann in den entsprechenden Ordner.
Das war's an sich auch schon. Einmal eingebaut, sollte jetzt man problemlos seine Installation verschieben können.