Bagaimana cara mengatur default.settings.php untuk menggunakannya untuk pengembangan, pengujian dan situs produksi?

8

Saya menggunakan dev , tst dan prd lingkungan untuk saya situs Drupal 7 mengatur. Saya menggunakan git untuk kontrol versi.

Saya ingin menghilangkan satu langkah petunjuk yang harus saya lakukan ketika memindahkan situs dari dev ke tst dan dari tst ke prd .

Sekarang saya harus memperbarui setting.php secara terpisah untuk situs dev, tst dan prd.

Saya ingin mengatur file default.settings.php sehingga semua pengaturan untuk dev, tst dan prd disimpan dalam satu default.settings.php dan. setelah menyalin ke settings.php, Drupal akan memilih pengaturan yang tepat tergantung pada lingkungan.

Saya mencari sesuatu seperti kode semu di bawah ini:

common.settings 

if environment = dev then
   ...
   dev.settings
   ...
else if environment = tst then
   ...
   tst.settings
   ...
else if environment = prd then
   ...
   prd.settings
   ...
end if

Apakah Anda tahu cara melakukan ini untuk Drupal 7, tepatnya?

Refineo
sumber

Jawaban:

11

Jangan gunakan file pengaturan yang sama seperti yang Anda sarankan dengan pseudocode Anda. Sebagai gantinya, gunakan tiga file pengaturan berbeda dalam tiga folder berbeda, masing-masing folder sesuai dengan nama domain dari masing-masing instance Anda.

Minimal, umumnya setiap lingkungan akan menggunakan host database yang terpisah. Pengaturan lain yang dapat berbeda dari lingkungan ke lingkungan dapat mencakup host Apache Solr, pengaturan memcached, folder sementara dan folder file, untuk beberapa nama. Anda dapat menempatkan semua itu di sana. Ketika Anda memigrasi database Anda dari PROD ke TEST ke DEV, itu akan secara otomatis mengambil pengaturan yang Anda tentukan.

Bayangkan situs saya disebut myfoobarsite.com. Beginilah struktur pengaturan saya akan terlihat seperti:

/htdocs
../sites
..../default
....../default.settings.php
..../dev.myfoobarsite.com (DEV)
....../settings.php
..../qa.myfoobarsite.com (TEST)
....../settings.php
..../myfoobarsite.com (PROD)
....../settings.php

Saya juga umumnya memiliki dua contoh lokal situs, satu dengan snapshot database terbaru dari PROD dan satu lagi di mana saya menyimpan semua perubahan saya. Ini sangat berguna ketika bekerja dengan Fitur, dan memungkinkan Anda untuk menguji fitur Anda terhadap basis data produksi (lokal) sebelum melakukan. Berikut struktur yang dimodifikasi:

/htdocs
../sites
..../default
..../dev.myfoobarsite.com (DEV)
..../qa.myfoobarsite.com (TEST)
..../myfoobarsite.com (PROD)
..../mfbs.local (LOCAL ONE)
....../settings.php
..../mfbs2.local (LOCAL TWO)
....../settings.php

Sedangkan untuk instance lokal Anda, ingatlah untuk membuat entri yang sesuai dalam /etc/hostsfile dan untuk memodifikasi pengaturan host Apache Anda.

Untuk jaga-jaga, saya juga menempatkan cuplikan dari settings.php untuk panduan:

<?php
$databases['default']['default'] = array(
    'database' => 'myfoobarsite',
    'username' => 'foo',
    'password' => 'bar',
    'host' => '127.0.0.1',
    'port' => '3306',
    'driver' => 'mysql',
    'prefix' => '',
);

/**
 * Apache Solr settings.
 * Use the acquia_identifier/acquia_key when hosting w/ Acquia.
 * Specify only the apachesolr_path key for your local instance
 * or instances that do not use Acquia.
 */
//$conf["acquia_identifier"] = "ABCD-12345";
//$conf["acquia_key"] = "1234f05ab12345dc1234a1234bbc1c12";
$conf["apachesolr_path"] = "http://localhost:8983/solr";

/**
 * Filesystem settings (MAC OS X, LOCAL)
 */
$conf["file_public_path"] = "sites/default/files";
$conf["file_temporary_path"] = "/Users/amateurbarista/tmp";
$conf["file_private_path"] = "/Users/amateurbarista/Sites/tfk/private";

Terakhir, jika Anda hosting dengan Acquia, Anda harus mengunjungi http://myfoobarsite.com/admin/config/system/acquia-agentdan mengklik "hapus kunci" setiap kali Anda memigrasi basis data. Itu akan menyebabkan Drupal untuk menjatuhkan kunci yang datang dengan database yang diimpor dan mengambil yang ditentukan dalam file pengaturan.

barista amatir
sumber
Saya mungkin melewatkan intinya, tetapi bagaimana ini lebih baik daripada pseudocode dalam pertanyaan?
Randell
1
Privasi, keamanan, manajemen mikro. Menempatkan pengaturan dalam file yang berbeda memungkinkan peran yang berbeda (pengembang lokal, sysadmin) memiliki izin berbeda ke file yang berbeda. Sysadmin juga dapat menolak visibilitas ke pengaturan prod / qa / dev menggunakan saran saya, sementara pengembang lokal akan selalu mempertahankan pengaturan lokalnya. Ini juga lebih sulit untuk mengacaukan segalanya, dengan pendekatan 'semua hal dalam satu file', lebih mudah untuk mengacaukan semua lingkungan Anda sekaligus. Dengan saran saya, Anda bahkan dapat mengatur agar modul yang berbeda hadir dan diaktifkan per situs.
barista amatir
0

Anda juga dapat menggunakan modul Lingkungan yang memungkinkan Anda menggunakan berbagai modul per lingkungan.

Instruksi

Pertama, Anda perlu mengatur situs dev / staging / produksi Anda dengan settings.php unik mereka sendiri (pola umum untuk ini adalah memerlukan settings.local.php dari settings.php). Jika Anda tidak memiliki pengaturan seperti ini, maka Anda tidak memerlukan modul ini.

Untuk staging / dev, tambahkan sesuatu seperti ini ke settings.php, setelah environment_modules diaktifkan, modul-modul ini juga akan diaktifkan.

Misalnya

$conf['environment_modules'] = array(
  'devel' => 'sites/all/modules/devel/devel.module',
);

Anda juga dapat menggunakan satu pengaturan.php dengan menggunakan contoh berikut:

$env = $_ENV['AH_SITE_ENVIRONMENT']; // Acquia way: environment name
$env = $_SERVER['SERVER_NAME']; // or your server name, or whatever
$envModules = array(
    'default' => array( // By default it is development environment
      'devel' => 'sites/all/modules/contrib/devel/devel.module',
      'coder_review' => 'sites/all/modules/contrib/coder/coder_review/coder_review.module',
    ),
    'dev' => array(
      'devel' => 'profiles/mp_singapore/modules/devel/devel.module',
      'coder_review' => 'sites/all/modules/contrib/coder/coder_review/coder_review.module',
    ),
    'test' => array(
      'diff' => 'sites/all/modules/contrib/diff/diff.module',
    ),
    'prod' => array(
      'diff' => 'sites/all/modules/contrib/diff/diff.module',
    ),
);
$conf['environment_modules'] = $envModules[$env] ?: $envModules['default'];
kenorb
sumber
Tidak ada versi d8 modul ini hingga saat ini.
Vishal Kumar Sahu