¿Cómo configuro default.settings.php para usarlo en sitios de desarrollo, prueba y producción?

8

Utilizo entornos dev , tst y prd para la configuración de mi sitio Drupal 7. Yo uso git para el control de versiones.

Me gustaría eliminar un paso manual que debo hacer al mover el sitio de dev a tst y de tst a prd .

Ahora tengo que actualizar settings.php por separado para los sitios dev, tst y prd.

Me gustaría configurar el archivo default.settings.php para que todas las configuraciones para dev, tst y prd se almacenen en un archivo default.settings.php y. después de copiar a settings.php, Drupal elegirá la configuración correcta según el entorno.

Estoy buscando algo como el pseudo código a continuación:

common.settings 

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

¿Sabes cómo hacer esto exactamente para Drupal 7?

Refineo
fuente

Respuestas:

11

No use el mismo archivo de configuración que sugiere con su pseudocódigo. En su lugar, use tres archivos de configuración diferentes en tres carpetas diferentes, cada carpeta correspondiente al nombre de dominio de cada una de sus instancias.

Como mínimo, generalmente cada entorno utilizará un host de base de datos separado. Otras configuraciones que pueden diferir de un entorno a otro pueden incluir el host Apache Solr, la configuración de memoria caché, la carpeta temporal y la carpeta de archivos, por nombrar algunas. Puedes colocar todos esos allí. Cuando migra su base de datos de PROD a TEST a DEV, recogerá automáticamente la configuración que especificó.

Imagine que mi sitio se llama myfoobarsite.com. Así es como se vería mi estructura de configuración:

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

También tengo generalmente dos instancias locales del sitio, una con la última instantánea de la base de datos de PROD y otra donde guardo todos mis cambios. Esto es muy útil cuando se trabaja con Características, y le permite probar sus características contra la base de datos de producción (localmente) antes de comprometerse. Aquí está la estructura modificada:

/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

En cuanto a sus instancias locales, recuerde realizar las entradas apropiadas en el /etc/hostsarchivo y modificar la configuración del host Apache.

Por si acaso, también coloqué un fragmento de settings.php como guía:

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

Finalmente, si está alojando con Acquia, deberá ir http://myfoobarsite.com/admin/config/system/acquia-agenty hacer clic en "borrar claves" cada vez que migre la base de datos. Eso hará que Drupal descarte las claves que vinieron con la base de datos importada y recoja las especificadas en el archivo de configuración.

barista aficionado
fuente
Probablemente me estoy perdiendo el punto, pero ¿cómo es esto mejor que el pseudocódigo en la pregunta?
Randell
1
Privacidad, seguridad, microgestión. Poner la configuración en diferentes archivos permite que diferentes roles (desarrollador local, administrador del sistema) tengan diferentes permisos para diferentes archivos. Un administrador de sistemas también puede negar la visibilidad de la configuración de prod / qa / dev usando mi sugerencia, mientras que el desarrollador local siempre conservará su configuración local. También es más difícil desordenar las cosas, con el enfoque 'todo en un solo archivo', es más fácil desordenar todos sus entornos a la vez. Con mi sugerencia, incluso está configurado para tener diferentes módulos presentes y habilitados por sitio.
barista aficionado
0

También puede usar módulos de entorno que le permiten usar diferentes módulos por entorno.

Instrucciones

Primero, debe tener sus sitios de desarrollo / preparación / producción configurados con su propia configuración única.php (un patrón común para esto es requerir la configuración.local.php de settings.php). Si no tiene este tipo de configuración, entonces no necesita este módulo.

Para la puesta en escena / desarrollo, agregue algo como esto a settings.php, una vez que se habilite environment_modules, estos módulos también se habilitarán.

P.ej

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

También puedes usar un settings.php usando el siguiente ejemplo:

$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
fuente
No hay versión d8 de este módulo hasta la fecha.
Vishal Kumar Sahu