Cómo personalizar settings.php durante el perfil de instalación

9

Estoy creando un perfil de instalación para el proyecto interno de mi empresa actual.

Durante el proceso de instalación, uno de los módulos personalizados se bloquea init(), ya que intenta usar una variable global definida en settings.php(ese es el comportamiento predeterminado actual del módulo)

Utilizando system_form_install_settings_form_alter(), cambié el formulario de configuración, agregando un campo de texto de entrada para la entrada del usuario, y al enviar el valor se agrega settings.php, pero settings.phpse reescribe antes de que comience la instalación del perfil.

¿Hay alguna forma de evitar la limpieza settings.phpmediante el proceso de instalación?

Paulo Gomes
fuente
1
Tal vez sería más fácil parchear el módulo que está fallando y enviar su cambio a la cola de problemas para ese proyecto. Antes de aceptar su cambio, puede agregar una referencia a su parche en el archivo MAKE para su perfil de instalación.
greg_1_anderson
Hola, gracias por su respuesta. Es un módulo interno personalizado (no uno contributivo), pero sí, lo parcheé y resolví el problema.
Paulo Gomes
¿Es algo en lo que también podría ayudar usar un archivo settings.local.php que anule el archivo settings.php?
beth
Este enlace fue de gran ayuda para mí previousnext.com.au/blog/…
Vic

Respuestas:

3

Puede que le resulte más fácil usar un settings.common.php

A menudo, durante los proyectos de equipo, tenemos settings.phpcredenciales locales con db, etc. y una settings.common.phpconfiguración común para los entornos de instalación y despliegue.

Puede agregar settings.common.phpcon una línea de inclusión / solicitud ensettings.php

require 'settings.common.php'; // same directory, e.g sites/default/settings.common.php

y luego escríbelo según sea necesario durante la instalación.

David Thomas
fuente
3

Mi respuesta depende del servidor que usa Apache, pero supongo que cualquiera de los otros servidores web también puede lograr esto.

En su configuración de virtualhost, puede configurar todas las variables para su entorno:

SetEnv DBUSER datbase_user
SetEnv DBPASS database_pass
SetEnv DBNAME database_name
SetEnv DBHOST localhost

Y en su archivo settings.php:

$databases = array (
   'default' => 
   array (
     'default' => 
     array (
       'database' => $_SERVER["DBNAME"],
       'username' => $_SERVER["DBUSER"],
       'password' => $_SERVER["DBPASS"],
       'host' => $_SERVER["DBHOST"],
       'port' => '',
       'driver' => 'mysql',
       'prefix' => '',
    ),
   ),
 );

También puede establecer cualquier otra variable de esta manera.

Si le preocupa que la matriz $ _SERVER caiga en las manos equivocadas, puede desarmar todas las variables importantes en la parte inferior de settings.php:

unset($_SERVER["DBUSER"]);
unset($_SERVER["DBPASS"]);
unset($_SERVER["DBNAME"]);
unset($_SERVER["DBHOST"]);

Así es como lo hacemos en mi oficina para mover sitios entre nuestros entornos de desarrollo, montaje e incluso producción

Scott Joudry
fuente