Básicamente, una de las preguntas más importantes de todos los tiempos: ¿Cuáles son algunas de las formas en que usa settings.php en su flujo de trabajo de desarrollo / preparación?
En este momento, tengo mi archivo settings.php configurado de la siguiente manera, y baso mi desarrollo en la directiva $ HOST del servidor, lo que significa que puedo trabajar en dev.example.com para el servidor de desarrollo (compartido), local.example. com para mi computadora local (y el pago de código local de otros desarrolladores) y www.example.com (o simplemente example.com) para el sitio en vivo.
(Este código se encuentra en la sección 'Configuración de la base de datos' de settings.php):
$host = $_SERVER['HTTP_HOST'];
$base_url = 'http://'.$host;
$cookie_domain = $host;
switch($host) {
case 'example.com': # Production server
$db_url = 'mysqli://prod_sql_user:[email protected]/prod_db';
$update_free_access = FALSE;
$conf = array (
// Set production config options here...
'example_setting' => 0,
);
break;
case 'dev.example.com': # Development server
$db_url = 'mysqli://dev_sql_user:[email protected]/dev_db';
$update_free_access = FALSE;
$conf = array (
// Set production config options here...
'example_setting' => 0,
);
break;
case 'local.example.com': # Local server
$db_url = 'mysqli://local_sql_user:[email protected]/local_db';
$update_free_access = FALSE;
$conf = array (
// Set production config options here...
'example_setting' => 0,
// Turn off most core caching.
'cache_inc' => 'includes/cache.inc',
'cache' => CACHE_DISABLED,
);
break;
}
?>
Esto funciona bastante bien para la mayoría de los propósitos, pero significa que tenemos un montón de código extraño en nuestro archivo settings.php compartido ... ¿hay una mejor manera?
fuente
Respuestas:
Lo que hago es separar ese archivo en settings.php y local.settings.php.
Al final de settings.php se encuentra el siguiente código:
El archivo local se excluye de cualquier VCS que esté utilizando. La ventaja es que puede poner configuraciones que son comunes en todas las instancias en settings.php y tenerlas versionadas / distribuidas automáticamente y mantener las cosas locales en local.settings.php.
fuente
(__DIR__)
lugar dedirname(__FILE__)
. Son equivalentes .Parece que está reinventando la funcionalidad multisitio integrada de Drupal.
Personalmente, guardo todos los temas y módulos estándar para el sitio
sites/all
, y luego tengosites/dev.example.com
ysites/example.com
.Como
files
beneficio adicional, puede tener diferentes carpetas para cada sitio, y también puede agregar cualquier módulo de desarrollosites/dev.example.com/modules
.fuente
sites/dev.example.com/modules
asites/example.com/modules
Prefiero ignorar el archivo localmente (usando un
.gitignore
archivo en git) y luego mantener versiones separadas si el archivo en cada host.fuente
Siempre tiendo a configurar DNS o entradas de archivos de host y uso
y
Luego tengo directorios de archivos de configuración completamente separados con diferentes directorios de archivos. Por ejemplo ./sites/dev.example.com/files
fuente
¿Por qué no tener algunas carpetas basadas en el nombre del host de desarrollo?
Ejemplo
Cada uno con su propio archivo de configuración y db_url.
fuente
Si lo único que cambia son las credenciales de la base de datos, puede establecer variables de entorno en su configuración de host virtual local (y preparación / producción) o en una carpeta .htaccess sobre su raíz web. Aquí hay un ejemplo simple:
/var/www/example.com/drupal-resides-here
Entonces puedo crear un archivo .htaccess aquí:
/var/www/example.com/.htaccess
que tiene el siguiente código:
Luego, en
/var/www/example.com/drupal-resides-here/sites/default/settings.php
(o lo que sea) puede obtener las credenciales de db como:$db_url = "mysql://{$_SERVER['DB1_USER']}:{$_SERVER['DB1_PASS']}@{$_SERVER['DB1_HOST']}:{$_SERVER['DB1_PORT']}/{$_SERVER['DB1_NAME']}";
Esto permite que varios desarrolladores ejecuten cosas localmente y puede avanzar a la puesta en escena / producción mientras sigue rastreando settings.php (hay más cosas allí que solo las credenciales de la base de datos ...). Tampoco tendría que realizar un seguimiento de múltiples archivos settings.php.
fuente
drush up --y
? Eso sobrescribirá su archivo base .htaccess..htaccess
archivo un nivel por encima de webroot. Por ejemplo,/var/www/.htaccess
almacena estas directivas, y/var/www/drupal/.htaccess
sería de Drupal.htaccess
. También podría simplemente ponerlo en la configuración de host virtual de Apache, que es aún mejor. Independientemente de todo eso, casi siempre tenemos cosas personalizadas en el webroot.htaccess
y, por lo tanto, si actualizamos Drupal, debemos comparar los.htaccess
cambios con Git.La solución más simple y eficiente que es solo una línea es la siguiente. Simplemente inclúyalo en la última línea de su archivo settings.php:
El símbolo @ en el frente solo significa que no muestra ningún error, incluso si no encuentra ese archivo. Las configuraciones típicas como esta implican un condicional para verificar si el archivo está allí. Esto lo logra en una línea sin él.
http://php.net/manual/en/language.operators.errorcontrol.php
También conocido como el operador PHP STFU .
fuente