Come posso impostare default.settings.php per usarlo per siti di sviluppo, test e produzione?


8

Uso ambienti dev , tst e prd per la configurazione del mio sito Drupal 7. Uso git per il controllo della versione.

Vorrei eliminare un passaggio manuale che devo fare quando si sposta il sito da dev a tst e da tst a prd .

Ora devo aggiornare settings.php separatamente per i siti dev, tst e prd.

Vorrei impostare il file default.settings.php in modo che tutte le impostazioni per dev, tst e prd siano memorizzate in un default.settings.php e. dopo aver copiato su settings.php, Drupal sceglierà le giuste impostazioni a seconda dell'ambiente.

Sto cercando qualcosa di simile allo pseudo codice qui sotto:

common.settings 

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

Sai come fare esattamente per Drupal 7?

Risposte:


11

Non utilizzare lo stesso file di impostazioni che stai suggerendo con il tuo pseudocodice. Utilizzare invece tre diversi file di impostazioni in tre diverse cartelle, ciascuna cartella corrispondente al nome di dominio di ciascuna istanza.

Come minimo, generalmente ogni ambiente utilizzerà un host di database separato. Altre impostazioni che possono differire da un ambiente all'altro possono includere l'host Apache Solr, le impostazioni memcached, la cartella temporanea e la cartella dei file, per citarne alcuni. Puoi posizionarli tutti lì. Quando si esegue la migrazione del database da PROD a TEST su DEV, verranno automaticamente rilevate le impostazioni specificate.

Immagina che il mio sito si chiami myfoobarsite.com. Ecco come apparirebbe la mia struttura delle impostazioni:

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

In genere ho anche due istanze locali del sito, una con l'istantanea del database più recente di PROD e un'altra in cui mantengo tutte le mie modifiche. Questo è molto utile quando si lavora con le funzionalità e consente di testare le funzionalità sul database di produzione (localmente) prima di eseguire il commit. Ecco la struttura modificata:

/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

Per quanto riguarda le tue istanze locali, ricordati di inserire le voci appropriate nel /etc/hostsfile e di modificare le impostazioni dell'host Apache.

Per ogni evenienza, ho anche inserito uno snippet da settings.php come guida:

<?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";

Infine, se stai ospitando con Acquia, dovrai andare su http://myfoobarsite.com/admin/config/system/acquia-agente fare clic su "cancella chiavi" ogni volta che esegui la migrazione del database. Ciò farà sì che Drupal rilasci le chiavi fornite dal database importato e raccolga quelle specificate nel file delle impostazioni.


Probabilmente mi manca il punto, ma come è meglio lo pseudocodice nella domanda?
Randell,

1
Privacy, sicurezza, microgestione. Inserendo le impostazioni in file diversi consente a ruoli diversi (sviluppatore locale, amministratore di sistema) di disporre di autorizzazioni diverse per file diversi. Un amministratore di sistema può anche negare la visibilità delle impostazioni prod / qa / dev usando il mio suggerimento, mentre lo sviluppatore locale manterrà sempre le sue impostazioni locali. È anche più difficile confondere le cose, con l'approccio 'tutto in un unico file', è più facile confondere tutti i tuoi ambienti contemporaneamente. Con il mio suggerimento, hai anche impostato per avere diversi moduli presenti e abilitati per sito.
barista dilettante

0

È inoltre possibile utilizzare i moduli Environment che consentono di utilizzare moduli diversi per ambiente.

Istruzioni

Per prima cosa, devi avere i tuoi siti di sviluppo / messa in scena / produzione impostati con i loro unici settings.php (un modello comune per questo è richiedere settings.local.php da settings.php). Se non si dispone di questo tipo di installazione, non è necessario questo modulo.

Per la stadiazione / sviluppo, aggiungi qualcosa di simile a settings.php, una volta abilitato environment_modules, anche questi moduli saranno abilitati.

Per esempio

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

Puoi anche usare un settings.php usando il seguente esempio:

$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'];

Nessuna versione d8 di questo modulo fino alla data.
Vishal Kumar Sahu
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.