4

ExpressionEngine CMS (php) を使用して Web サイトを作成します。サイトごとに、Subversion リポジトリをセットアップし、EE のインストールと、使用されているカスタム テンプレート、画像、JavaScript などをコミットします。リポジトリには、すべての環境変数を含むファイルと .htaccess ファイルが含まれています。

開発に使用するポストコミットを介して更新されたリポジトリの作業コピーを備えた開発サーバーがあります。リリースの準備ができたら、Subversion でブランチを作成し、本番環境に必要な変更を加え、リリース番号をタグ付けし、リポジトリをエクスポートし、ライブ サーバーの新しいディレクトリにアップロードし、ファイルを適切な場所にシンボリック リンクします。ロールバックは、シンボリック リンクを以前のリリースに戻すのと同じくらい簡単です。

問題は、開発サーバーと運用サーバーで異なる必要がある環境変数を変更する必要があるステップです。これは、間違った場所にリダイレクトする htaccess ルールのコメント化 (解除) 、ドメインが異なるため Google マップ API キーの交換、JavaScript を 1 つの難読化ファイルに最小化してサイズと http 接続をダウンさせるスクリプトの実行などです。 .

問題は、これをより自動化するにはどうすればよいかということです。リリース手順を最小限に抑えたいと考えています。Capistrano や Make などのツールの存在は知っていますが、必要なすべてのファイルを変更する方法がわかりません...どのように整理しますか? 数週間に 1 回程度の頻度で発生する場合、自動化に時間を費やす価値はありますか?

4

4 に答える 4

3

多くの構成オプションは、$_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 ディレクティブを使用して、vhost 定義で代替の .htaccess ファイルを設定できます。

<VirtualHost *:80>
    ServerName sitename
    AccessFileName .htaccess-dev
</VirtualHost>
于 2009-05-29T03:47:01.020 に答える
0

もう1つの方法は、構成ファイルをリリースブランチに一度分岐し、宛先で編集済みとしてマークしてから、3方向マージの実行方法を記憶しているマージスクリプトを使用することです。ソースで構成が変更されると、競合が発生する可能性があります。これは、宛先で同様の変更を行う必要があるため、良いことです。

したがって、プロジェクトの存続期間中、開発とリリースの2つのツリーを継続します。開発が成熟するにつれて、それらを統合してリリースします。より複雑なリリースプロセスがある場合は、3番目のQAツリーも作成できます。

新しいリリースをプルするときは、新しいブランチをプルするのではなく、作業領域から「リリース」領域に(マージ/統合として)コピーします。その時点でのリリースツリーのスナップショットインタイムも必要な場合は、アーカイブ目的でのみ使用する別のブランチ/コピー/タグを作成します。

ところで、これはPERFORCEが優れている分野の1つです。これは、既にマージしたものを記憶しており、2回マージを試みることはありません。

于 2009-05-29T04:13:04.463 に答える
0

Subversion の無視リストに構成ファイルを追加することで、この問題に対処しています。これは Stackoverflow ですでに解決されています:質問 #149485 を参照してください

基本的に、私はSVNにのみ保持し、すべてのインストールで、無視リストにあるsetup.default.phpものに手動でコピーします。setup.phpこれにより、ファイルがリポジトリにチェックインされなくなります。このファイルが変更されることはめったになく、要件が発生したときに処理できます。

于 2009-05-28T18:32:19.527 に答える
0

構成固有のディレクトリを維持することでこれに対処します。

したがって、たとえば、dev と production で .htaccess と config.php ファイルが異なる場合、それらは /trunk/config/{environment}/ に保持されます。

Ant/Nant スクリプトを使用してリリース パッケージを作成し、スクリプトには環境ごとのビルド タスクがあります。これらのタスクは、構成固有のファイルを取得します。

--

別のコメント投稿者は、HTTP_POST をオンにすることを提案しています。残念ながら、私は直接コメントすることはできません (十分に高い担当者ではありません)。HTTP_POST を使用して環境設定を決定すると、この値がクライアントから取得されるため、セキュリティ上の問題が発生する可能性があります。

于 2009-05-29T10:16:48.797 に答える