it-swarm-eu.dev

Návrhy pro settings.php - Local dev, Development server, Live server

V zásadě je to jedna z největších otázek všech dob: Jaké jsou způsoby, jak ve svém pracovním postupu vývoje/stagingu používáte settings.php?

Právě teď mám svůj soubor settings.php nastaven jako následující a svůj vývoj založím na direktivě $ Host na serveru - což znamená, že pro vývojový (sdílený) server, local.example, mohu pracovat na webu dev.example.com. com pro můj místní počítač (a jiné dev's místní kód pokladny), a www.example.com (nebo jen example.com) pro živé stránky.

(Tento kód je v části „Nastavení databáze“ souboru 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;

}
?>

Funguje to docela dobře pro většinu účelů, ale to znamená, že v našem sdíleném souboru settings.php sedí hodně cizího kódu ... existuje lepší způsob?

80
geerlingguy

Co dělám, je rozdělení tohoto souboru na settings.php a local.settings.php.

Na konci settings.php je následující kód:

if (file_exists(dirname(__FILE__) . '/local.settings.php')) {
  include dirname(__FILE__) . '/local.settings.php';
}

Místní soubor je potom vyloučen z jakéhokoli VCS, který používáte. Výhodou je, že do settings.php můžete vložit nastavení, která jsou běžná ve všech instancích, a mít tuto verzi automaticky distribuovanou a distribuovanou a ponechat místní obsah v local.settings.php.

66
Berdir

Vypadá to, že znovu objevujete vestavěné funkce Drupalu na více místech.

Osobně si ponechám všechna standardní témata a moduly pro web v sites/all, a pak mít sites/dev.example.com a sites/example.com.

Jako bonus pak můžete mít pro každý web různé složky files a do sites/dev.example.com/modules také.

26
Paul Jones

Raději ignoruji soubor lokálně (pomocí .gitignoregitujte v gitu) a pak si ponechte samostatné verze, pokud je soubor na každém hostiteli.

10
ack

Mám sklon vždy nastavovat a používat položky souborů DNS nebo Host

dev.example.com
staging.example.com

a

example.com

Pak mám úplně oddělené adresáře nastavení s různými adresáři souborů. Například ./sites/dev.example.com/files

7

Proč nemáte několik složek založených na vývoji názvu hostitele?

Příklad

  • sites/dev1.domain.com
  • sites/dev2.domain.com
  • sites/dev3.domain.com
  • weby/www.domain.com

Každý z nich má svůj vlastní soubor nastavení a db_url.

5
Kevin

Pokud se mění pouze údaje pověření databáze, můžete nastavit proměnné prostředí v místní (a pracovní/produkční) konfiguraci virtuálního hostitele nebo ve složce nad webovým kořenovým adresářem. Zde je jednoduchý příklad:

/var/www/example.com/drupal-resides-here

Zde mohu vytvořit soubor .htaccess:

/var/www/example.com/.htaccess

který má následující kód:

SetEnv DB1_USER my_local_user
SetEnv DB1_PASS my_local_pass
SetEnv DB1_Host my_local_Host
SetEnv DB1_NAME my_local_dbname

Pak v /var/www/example.com/drupal-resides-here/sites/default/settings.php (nebo cokoli) můžete získat pověření db jako:

$db_url = "mysql://{$_SERVER['DB1_USER']}:{$_SERVER['DB1_PASS']}@{$_SERVER['DB1_Host']}:{$_SERVER['DB1_PORT']}/{$_SERVER['DB1_NAME']}";

To umožňuje více vývojářům spouštět věci lokálně a vy můžete tlačit na inscenace/produkci a přitom sledovat nastavení settings.php (tam je více věcí než jen pověření databáze ...). Také byste nemuseli sledovat více souborů settings.php.

2

Nejjednodušší a nejúčinnější řešení, které je jen jednou řádkou, je následující. Stačí jej zahrnout do posledního řádku souboru settings.php:

@include('settings.local.php');

Symbol @ v přední části znamená, že se nezobrazí žádná chyba, i když tento soubor nenajde. Typické nastavení, jako je toto, zahrnuje podmíněnou kontrolu, zda soubor existuje. Tím je dosaženo v jednom řádku bez něj.

http://php.net/manual/en/language.operators.errorcontrol.php

Také známý jako STFU PHP operátor ).

0