SVN からのデプロイ中に開発環境と実際の環境の間で構成の差異を維持する
-
06-09-2019 - |
質問
Web サイトの作成には ExpressionEngine CMS (php) を使用します。サイトごとに、Subversion リポジトリをセットアップし、EE インストールとカスタム テンプレート、イメージ、JavaScript などをコミットします。使用されているもの。リポジトリには、すべての環境変数を含むファイルと .htaccess ファイルが含まれています。
開発サーバーには、開発に使用するコミット後のリポジトリの作業コピーが更新されています。リリースの準備ができたら、Subversion でブランチを作成し、本番環境に必要な変更を加え、リリース番号をタグ付けし、リポジトリをエクスポートし、ライブ サーバー上の新しいディレクトリにアップロードして、ファイルを所定の場所にシンボリックリンクします。ロールバックは、以前のリリースにシンボリックリンクするだけで簡単です。
問題は、開発サーバーと運用サーバーで異なる必要がある環境変数を変更する必要があるステップです。これは、間違った場所にリダイレクトする htaccess ルールのコメント化 (解除)、ドメインが異なるため Google マップ API キーの交換、サイズと http 接続を抑えるために JavaScript を 1 つの難読化されたファイルに最小化するスクリプトの実行などです。 。
問題は、これをどのようにしてさらに自動化できるかということです。リリース手順を最小限に抑えたいと考えています。Capistrano や Make などのツールの存在は知っていますが、必要なすべてのファイルを変更する方法がわかりません...そのようなことをどのように整理しますか?数週間に 1 回程度発生する場合、自動化に時間を費やす価値はありますか?
解決
設定オプションの多くは、$ _SERVER [「HTTP_HOST」]をオンにすることで対処することができます。
例
switch ($_SERVER['HTTP_HOST']) {
case 'developement.domain.com':
$api_key = "dev environment api key";
break;
default:
$api_key = "live environment api key";
}
次に.htaccessの問題のためにあなたがAccessFileNameディレクティブを使用して、バーチャルホストの定義で代替の.htaccessファイルを設定することができます:
<VirtualHost *:80>
ServerName sitename
AccessFileName .htaccess-dev
</VirtualHost>
他のヒント
構成ファイルを追加することでこの問題に対処します Subversion 無視リスト. 。これについては、Stackoverflow ですでに取り上げられています。 質問#149485を参照
基本的には保管するだけです setup.default.php
SVN にあり、インストールするたびに手動でコピーします。 setup.php
これは無視リストに載っています。これにより、ファイルをリポジトリにチェックインし直すことができなくなります。このファイルが変更されることはほとんどなく、要件が発生したときに処理できます。
別の方法としては、リリースブランチに、一度設定ファイルを分岐し、その後、先に編集したとしてマークし、その後、3方向マージを行う方法を覚えてマージスクリプトを使用することです。ソース上の設定を変更した場合、それはおそらくあなたはおそらく先に同様の変更を行う必要があるので、良いことです葛藤を、生成されます。
開発、およびリリース:このように、次の2本のプロジェクトの存続のために行くの木を続けます。物事が開発に成熟するにつれ、あなたは解放するためにそれらの上に統合します。あなたがより複雑なリリースプロセスを持っている場合は、同様に第三、QA、ツリーを持つことができます。
あなたは新しいリリースを引くと、あなたが「リリース」の領域に作業エリアからコピー(マージ/統合など)、ブランドの新しいブランチを引っ張るのではなく。あなたはまた、スナップショット・イン・タイムリリースツリーのその時点でをしたい場合は、あなたはアーカイブの目的のためにのみ使用し、別のブランチ/コピー/タグを作成します。
ところで:これはPERFORCEのが輝く地域の一つである - それはあなたがすでに合併何を覚えて、これまで二回マージしようとしません。
私たちは、コンフィグ固有のディレクトリを維持することによってこれに対処します。
別の.htaccessとDEVと生産の間のconfig.phpファイルを持っている場合は、ですから、例えば、彼らは/トランク/設定/ {}環境に維持される/
私たちは、リリースパッケージを作成するNAntの/ Antスクリプトを使用して、スクリプトは、各環境のビルドタスクを持っています。これらのタスクは、設定、特定のファイルを拾います。
-
別のコメンターはHTTP_POSTに切り替えることを示唆しています。残念ながら、私は直接(ない十分に高い担当者)をコメントすることはできません。この値は、クライアントから来ているので、環境の構成を決定するHTTP_POSTを使用すると、潜在的なセキュリティ上の問題があります。