default.settings.phpを設定して、開発、テスト、本番サイトで使用するにはどうすればよいですか?


8

Drupal 7サイトのセットアップにdevtstprd環境を使用しています。バージョン管理にはgitを使用しています。

サイトをdevからtstに、およびtstからprdに移動するときに行う必要がある手動の手順を1つ削除したいと思います。

ここで、dev、tst、prdサイトのsettings.phpを個別に更新する必要があります。

default.settings.phpファイルを設定して、dev、tst、prdのすべての設定が1つのdefault.settings.phpに保存されるようにしたいと思います。Drupalは、settings.phpにコピーした後、環境に応じて適切な設定を選択します。

以下の疑似コードのようなものを探しています:

common.settings 

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

Drupal 7でこれを行う方法を正確に知っていますか?

回答:


11

疑似コードで提案しているように、同じ設定ファイルを使用しないでください。代わりに、3つの異なるフォルダー内の3つの異なる設定ファイルを使用します。各フォルダーは、各インスタンスのドメイン名に対応しています。

少なくとも、通常、各環境は個別のデータベースホストを使用します。環境によって異なるその他の設定には、Apache Solrホスト、memcached設定、一時フォルダー、ファイルフォルダーなどがあります。それらすべてをそこに配置できます。データベースをPRODからTEST、DEVに移行すると、指定した設定が自動的に取得されます。

私のサイトの名前がmyfoobarsite.comだとします。これは私の設定構造がどのようになるかです:

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

また、通常、サイトのローカルインスタンスが2つあります。1つはPRODからの最新のデータベーススナップショットで、もう1つはすべての変更を保存します。これは、機能を操作するときに非常に便利です。コミットする前に、機能を(ローカルで)本番データベースに対してテストできます。変更された構造は次のとおりです。

/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

ローカルインスタンスについては、/etc/hostsファイルに適切なエントリを作成し、Apacheホストの設定を変更することを忘れないでください。

念のため、settings.phpのスニペットもガイダンスとして配置しました。

<?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";

最後に、Acquiaでホスティングしている場合はhttp://myfoobarsite.com/admin/config/system/acquia-agent、データベースを移行するたびに、「キーのクリア」に移動してクリックする必要があります。これにより、Drupalはインポートされたデータベースに付属するキーを削除し、設定ファイルで指定されたキーを取得します。


私はおそらくポイントを逃していますが、これは質問の疑似コードよりどのように優れていますか?
Randell

1
プライバシー、セキュリティ、マイクロ管理。設定を異なるファイルに配置すると、異なる役割(ローカル開発者、sysadmin)が異なるファイルに対して異なる権限を持つことができます。システム開発者は、私の提案を使用してprod / qa / dev設定への可視性を拒否することもできますが、ローカル開発者は常にローカル設定を保持します。また、すべてを1つのファイルにまとめるというアプローチにより、すべての環境を一度に混乱させることが容易になります。私の提案では、サイトごとに異なるモジュールが存在し、有効になるように設定されています。
アマチュアバリスタ2014年

0

環境ごとに異なるモジュールを使用できる環境モジュールを使用することもできます。

指示

まず、dev / staging / productionサイトを独自のユニークなsettings.phpで設定する必要があります(これの一般的なパターンは、settings.phpからsettings.local.phpを要求することです)。このような設定がない場合は、このモジュールは必要ありません。

staging / devの場合は、settings.phpに次のようなものを追加します。environment_modulesが有効になると、これらのモジュールも有効になります。

例えば

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

次の例を使用して、1つのsettings.phpを使用することもできます。

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

現在まで、このモジュールのd8バージョンはありません。
Vishal Kumar Sahu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.