it-swarm-tr.com

Settings.php için öneriler - Yerel geliştirme, Geliştirme sunucusu, Canlı sunucu

Temel olarak, tüm zamanların en büyük sorularından biri: Geliştirme/hazırlama iş akışınızda settings.php'yi kullanmanın bazı yolları nelerdir?

Şu anda, benim settings.php dosyamı aşağıdaki gibi ayarladım ve gelişimimi sunucunun $ Host yönergesine dayandırıyorum - yani geliştirme (paylaşılan) sunucu, local.example için dev.example.com üzerinde çalışabilirim. com.tr yerel bilgisayarım (ve diğer geliştiricilerin yerel kod çıkışları) ve www.example.com (veya sadece example.com) için canlı site.

(Bu kod settings.php dosyasının 'Veritabanı ayarları' bölümünde bulunur):

$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;

}
?>

Bu, çoğu amaç için oldukça iyi çalışır, ancak paylaşılan settings.php dosyamızda bir sürü yabancı kodumuz olduğu anlamına gelir ... daha iyi bir yol var mı?

80
geerlingguy

Ne yaptığım bu dosyayı bir settings.php ve local.settings.php olarak ayırmak.

Settings.php dosyasının sonunda şu kod bulunur:

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

Yerel dosya daha sonra kullandığınız VCS'nin dışında tutulur. Avantajı, settings.php dosyasındaki tüm örneklerde ortak olan ayarları koyabilmeniz ve bu sürümün otomatik olarak sürümlendirilmesini/dağıtılmasını ve yerel öğeleri local.settings.php içinde tutmanızdır.

66
Berdir

Bu, Drupal'ın yerleşik çoklu site işlevselliğini yeniden keşfediyormuşsunuz gibi görünüyor.

Şahsen, site için tüm standart temaları ve modülleri sites/all ve sonra sites/dev.example.com ve sites/example.com.

Ek bir bonus olarak her site için farklı files klasörüne sahip olabilir ve sites/dev.example.com/modules de.

25
Paul Jones

Dosyayı yerel olarak yoksaymayı tercih ederim (.gitignore dosya git) ve ardından her bir Ana Bilgisayardaki dosya ayrı sürümleri tutar.

10
ack

Her zaman DNS veya Host dosya girişleri ayarlama ve kullanma eğilimindeyim

dev.example.com
staging.example.com

ve

example.com

Sonra tamamen farklı ayarlar dosya dizinleri ile farklı dosya dizinleri var. Örneğin ./sites/dev.example.com/files

6

Neden Geliştirme Ana Bilgisayar adını temel alan birkaç klasör yok?

Misal

  • siteler/dev1.domain.com
  • siteler/dev2.domain.com
  • siteler/dev3.domain.com
  • siteler/www.domain.com

Her birinin kendi ayar dosyası ve db_url vardır.

5
Kevin

Değişen tek şey veritabanı kimlik bilgileriyse, yerel (ve evreleme/üretim) sanal Ana Bilgisayar yapılandırmanızda veya .htaccess'te web kökünüzün üzerindeki bir klasörde ortam değişkenleri ayarlayabilirsiniz. İşte basit bir örnek:

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

Daha sonra burada bir .htaccess dosyası oluşturabilirim:

/var/www/example.com/.htaccess

aşağıdaki kodu içerir:

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

Daha sonra /var/www/example.com/drupal-resides-here/sites/default/settings.php (ya da her neyse) aşağıdaki gibi db kimlik bilgilerini alabilirsiniz:

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

Bu, birden çok geliştiricinin işleri yerel olarak çalıştırmasına izin verir ve hala settings.php'yi izlerken aşamalandırma/üretime zorlayabilirsiniz (orada sadece veritabanı kimlik bilgilerinden daha fazlası vardır ...). Ayrıca birden fazla settings.php dosyasını takip etmek zorunda kalmazsınız.

2

Sadece bir satır olan en basit ve en verimli çözüm şudur. Sadece settings.php dosyanızın son satırına ekleyin:

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

Öndeki @ sembolü, dosyayı bulamasa bile herhangi bir hata göstermemesi anlamına gelir. Bunun gibi tipik kurulumlar, dosyanın orada olup olmadığını kontrol etmek için bir koşul içerir. Bu, onsuz bir satırda başarır.

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

STFU PHP işleci olarak da bilinir.

0