Wie richte ich default.settings.php ein, um es für Entwicklungs-, Test- und Produktionsstandorte zu verwenden?

8

Ich benutze dev , tst und prd Umgebungen für meine Drupal 7 - Website einrichten. Ich benutze Git für die Versionskontrolle.

Ich möchte einen manuellen Schritt , den ich tun müssen , beseitigen , wenn Website bewegen dev zu tst und von tst zu prd .

Jetzt muss ich settings.php separat für dev-, tst- und prd-Sites aktualisieren.

Ich möchte die Datei default.settings.php einrichten, damit alle Einstellungen für dev, tst und prd in einer default.settings.php und gespeichert werden. Nach dem Kopieren in settings.php wählt Drupal je nach Umgebung die richtigen Einstellungen aus.

Ich suche so etwas wie den folgenden Pseudocode:

common.settings 

if environment = dev then
   ...
   dev.settings
   ...
else if environment = tst then
   ...
   tst.settings
   ...
else if environment = prd then
   ...
   prd.settings
   ...
end if

Wissen Sie genau, wie das für Drupal 7 geht?

Refineo
quelle

Antworten:

11

Verwenden Sie nicht dieselbe Einstellungsdatei, die Sie mit Ihrem Pseudocode vorschlagen. Verwenden Sie stattdessen drei verschiedene Einstellungsdateien in drei verschiedenen Ordnern, wobei jeder Ordner dem Domänennamen jeder Ihrer Instanzen entspricht.

In der Regel wird in jeder Umgebung ein separater Datenbankhost verwendet. Andere Einstellungen, die von Umgebung zu Umgebung unterschiedlich sein können, können der Apache Solr-Host, zwischengespeicherte Einstellungen, der temporäre Ordner und der Dateiordner sein, um nur einige zu nennen. Sie können alle dort platzieren. Wenn Sie Ihre Datenbank von PROD zu TEST zu DEV migrieren, werden die von Ihnen angegebenen Einstellungen automatisch übernommen.

Stellen Sie sich vor, meine Website heißt myfoobarsite.com. So würde meine Einstellungsstruktur aussehen:

/htdocs
../sites
..../default
....../default.settings.php
..../dev.myfoobarsite.com (DEV)
....../settings.php
..../qa.myfoobarsite.com (TEST)
....../settings.php
..../myfoobarsite.com (PROD)
....../settings.php

Im Allgemeinen habe ich auch zwei lokale Instanzen der Site, eine mit dem neuesten Datenbank-Snapshot von PROD und eine andere, in der ich alle meine Änderungen behalte. Dies ist sehr nützlich, wenn Sie mit Features arbeiten, und ermöglicht es Ihnen, Ihre Features vor dem Festschreiben anhand der Produktionsdatenbank (lokal) zu testen. Hier ist die modifizierte Struktur:

/htdocs
../sites
..../default
..../dev.myfoobarsite.com (DEV)
..../qa.myfoobarsite.com (TEST)
..../myfoobarsite.com (PROD)
..../mfbs.local (LOCAL ONE)
....../settings.php
..../mfbs2.local (LOCAL TWO)
....../settings.php

Denken Sie bei Ihren lokalen Instanzen daran, die entsprechenden Einträge in der /etc/hostsDatei vorzunehmen und die Apache-Hosteinstellungen zu ändern.

Für alle Fälle habe ich auch einen Ausschnitt aus der settings.php zur Orientierung platziert:

<?php
$databases['default']['default'] = array(
    'database' => 'myfoobarsite',
    'username' => 'foo',
    'password' => 'bar',
    'host' => '127.0.0.1',
    'port' => '3306',
    'driver' => 'mysql',
    'prefix' => '',
);

/**
 * Apache Solr settings.
 * Use the acquia_identifier/acquia_key when hosting w/ Acquia.
 * Specify only the apachesolr_path key for your local instance
 * or instances that do not use Acquia.
 */
//$conf["acquia_identifier"] = "ABCD-12345";
//$conf["acquia_key"] = "1234f05ab12345dc1234a1234bbc1c12";
$conf["apachesolr_path"] = "http://localhost:8983/solr";

/**
 * Filesystem settings (MAC OS X, LOCAL)
 */
$conf["file_public_path"] = "sites/default/files";
$conf["file_temporary_path"] = "/Users/amateurbarista/tmp";
$conf["file_private_path"] = "/Users/amateurbarista/Sites/tfk/private";

Wenn Sie mit Acquia hosten, müssen Sie bei http://myfoobarsite.com/admin/config/system/acquia-agentjeder Migration der Datenbank auf "Schlüssel löschen" klicken. Dadurch löscht Drupal die Schlüssel, die mit der importierten Datenbank geliefert wurden, und nimmt die in der Einstellungsdatei angegebenen Schlüssel auf.

Amateur Barista
quelle
Ich vermisse wahrscheinlich den Punkt, aber wie ist das besser als der Pseudocode in der Frage?
Randell
1
Datenschutz, Sicherheit, Mikromanagement. Durch das Einfügen von Einstellungen in verschiedene Dateien können verschiedene Rollen (lokaler Entwickler, Systemadministrator) unterschiedliche Berechtigungen für verschiedene Dateien haben. Ein Systemadministrator kann mithilfe meines Vorschlags auch die Sichtbarkeit der prod / qa / dev-Einstellungen verweigern, während der lokale Entwickler seine lokalen Einstellungen immer beibehält. Es ist auch schwieriger, Dinge durcheinander zu bringen. Mit dem Ansatz "Alle Dinge in einer Datei" ist es einfacher, alle Ihre Umgebungen gleichzeitig durcheinander zu bringen. Mit meinem Vorschlag sind Sie sogar so eingerichtet, dass pro Standort verschiedene Module vorhanden und aktiviert sind.
Amateur Barista
0

Sie können auch Umgebungsmodule verwenden, mit denen Sie verschiedene Module pro Umgebung verwenden können.

Anleitung

Zunächst müssen Ihre Entwicklungs- / Staging- / Produktionsstandorte mit einer eigenen eindeutigen settings.php eingerichtet sein (ein gängiges Muster hierfür ist, dass settings.local.php von settings.php benötigt wird). Wenn Sie diese Art der Einrichtung nicht haben, benötigen Sie dieses Modul nicht.

Fügen Sie für staging / dev so etwas zu settings.php hinzu. Sobald environment_modules aktiviert ist, werden auch diese Module aktiviert.

Z.B

$conf['environment_modules'] = array(
  'devel' => 'sites/all/modules/devel/devel.module',
);

Sie können auch eine settings.php verwenden, indem Sie das folgende Beispiel verwenden:

$env = $_ENV['AH_SITE_ENVIRONMENT']; // Acquia way: environment name
$env = $_SERVER['SERVER_NAME']; // or your server name, or whatever
$envModules = array(
    'default' => array( // By default it is development environment
      'devel' => 'sites/all/modules/contrib/devel/devel.module',
      'coder_review' => 'sites/all/modules/contrib/coder/coder_review/coder_review.module',
    ),
    'dev' => array(
      'devel' => 'profiles/mp_singapore/modules/devel/devel.module',
      'coder_review' => 'sites/all/modules/contrib/coder/coder_review/coder_review.module',
    ),
    'test' => array(
      'diff' => 'sites/all/modules/contrib/diff/diff.module',
    ),
    'prod' => array(
      'diff' => 'sites/all/modules/contrib/diff/diff.module',
    ),
);
$conf['environment_modules'] = $envModules[$env] ?: $envModules['default'];
Kenorb
quelle