2011-04-16 15 views
6

Estoy intentando configurar entornos en Drupal basados ​​en la URL. Por ejemplo, si voy a mysite.local, usará localdb y cambiará el nombre del sitio a "Local Mysite"; si voy a mysite.com, cambiará automáticamente para usar productiondb y establecerá el nombre en "Mysite".Configuración de varios entornos (desarrollo, producción) basados ​​en la URL

Ésta es una configuración similar que utilizo para la mayoría de los marcos basados ​​en MVC:

define('DEVELOPMENT', 'mysite.local'); 
define('PRODUCTION', 'mysite.com'); 

switch ($_SERVER['SERVER_NAME']) { 
    case DEVELOPMENT: 
    // development server 
    $config['base_url'] = "http://mysite.local"; 
    $config['title'] = "DEVELOPMENT Mysite"; 
    $config['debug'] = 1; 
    break; 

    default: 
    // live server 
    $config['base_url'] = "http://mysite.com/"; 
    $config['title'] = "Mysite"; 
    $config['debug'] = 0; 
    break; 
} 

¿Existe algo así en Drupal7 ya (no quiero usar diferentes sitios, solamente ajustes diferentes para el mismo sitio), y existe algún tipo de convención donde este cambio debe suceder (actualmente estoy pensando en settings.php).

+0

Sugiero que eche un vistazo a http://drupal.stackexchange.com/questions/9/suggestions-for-settings-php-local-dev-development-server-live-server/41#41, especialmente a mi responde allí. – Berdir

Respuesta

4

Personalmente, no configuro settings.php en el control de versiones, (settings.default.php es), luego solo guardo un archivo settings.php personalizado basado en settings.default.php en cada entorno.

Sin embargo, si prefiere configurar sus entornos de esa manera, algo así funcionaría en su archivo sites/default/settings.php.

define('DEVELOPMENT', 'mysite.local'); 
define('PRODUCTION', 'mysite.com'); 

switch ($_SERVER['SERVER_NAME']) { 
    case DEVELOPMENT: 
    // development server 
    $db_url = 'mysql://user:[email protected]/mydb_dev'; 
    $db_prefix = ''; 
    $base_url = 'http://mysite.local'; 
    $conf = array(
    'site_name' => 'Development Environment', 
    ); 
    break; 

    default: 
    // live server 
    $db_url = 'mysql://user:[email protected]/mydb_prod'; 
    $db_prefix = ''; 
    $base_url = 'http://mysite.com'; 
    $conf = array(
    'site_name' => 'My Site', 
    ); 
    break; 
} 

Recuerde, para cada uno de estos VARs que utiliza aquí, es necesario comentar si están definidos en otras partes del settings.php.

Debo agregar que creo que el multi-sitio con el propósito de un entorno de desarrollo es una mala idea, supongo que por la misma razón prefiero que cada entorno tenga su propio archivo personalizado settings.php. En la mayoría de los casos, prefiero mantener el código portátil porque no necesito referencias de código o sistema de archivos a ningún entorno, excepto en un archivo de configuración para el entorno en el que estoy ejecutando el código.

Usar la funcionalidad de múltiples sitios de Drupal para cada entorno que necesite desarrollar y escenificar, como otros sugieren aquí, sería una locura.

+0

Probablemente este sea el camino que tomaré. Lo necesito de esa manera, así que puedo implementarlo directamente desde mi SVN, en lugar de cambiar archivos y asegurarme de que todo funcione siempre. El asunto se complica aún más cuando agrego el servidor intermedio al entorno. –

+0

Parece más complicado de lo que necesita ser, pero sé que cada situación es diferente. Si utiliza el método de simplemente copiar settings.default.php a settings.php (es decir, settings.php no está en el control de la versión) en cada entorno una vez, entonces debería ser capaz de implementar a través de svn muy bien ya que sus archivos de configuración se nunca ser tocado Configurar cada archivo settings.php una vez es más fácil y más portátil que administrar todos esos datos en un único archivo settings.php. – Coder1

+0

Tenga en cuenta que Drush parece estar usando $ _SERVER ['HTTP_HOST'] y no $ _SERVER ['SERVER_NAME']. – mperrin

0

Creo que el uso de sitios separados es lo que desea. Tengo una configuración similar, y cada sitio tiene su propio archivo settings.php. Pero luego vinculé simbólicamente el directorio de módulos y temas para que no tenga archivos duplicados. Pero si está configurando un entorno para el desarrollo, querrá mantenerlos separados.

Así que tener algo como esto:

drupal/sites/mysite.com/themes 
drupal/sites/mysite.com/modules 
drupal/sites/mysite.com/settings.php 

drupal/sites/mysite.local/themes => ../../mysite.com/themes 
drupal/sites/mysite.local/modules => ../../mysite.com/modules 
drupal/sites/mysite.local/settings.php 

drupal/sites/default => mysite.com 

Drupal utilizará la configuración del sitio correcto en función de la URL.

+0

Esto es algo similar a lo que quiero, pero pensé que debería haber una forma mejor en Drupal para configurarlos, ya que no puedo usar el enlace simbólico (máquina Dev de Windows), y esos enlaces se perderán al pasar a una máquina diferente Supongo que la respuesta breve será que no hay nada en el lugar como este, y o bien tengo que ir con el "multi-sitio" y tengo archivos repetitivos, módulos, etc. que llevarán a la fragmentación, o para editar la configuración. php y configúralo como lo tengo arriba ... –

1

Lo que está describiendo se llama multi-site configuration, en Drupal.
Dicho con pocas palabras, en una configuración de varios sitios, está configurando Drupal para utilizar diferentes archivos de configuración basándose en el nombre de dominio utilizado para acceder al sitio. Permite utilizar el mismo código para diferentes nombres de dominio que apuntan al mismo servidor, como en su caso, donde desea acceder al mismo servidor web utilizando diferentes nombres de dominio.

Te interesa lo que se informa en Run multiple sites from the same code base (multi-site).

+0

Gracias. Conozco la función de "múltiples sitios" de Drupal, pero eso significa tener diferentes carpetas, módulos, cargas, etc. por cada entorno. Lo usé antes, pero quiero algo diferente. Quiero ser capaz de establecer diferentes entornos para el mismo sitio (la carpeta del sitio siempre es "predeterminada", pero el nombre, la base de datos y algunas otras configuraciones se establecerán en función de la URL). En otras palabras, lo despliego en mi casilla local, la base de datos se cambiará automáticamente a mi base de datos local, etc. –

Cuestiones relacionadas