4

現在5台のサーバーに配布しているPythonプログラム、クラス、パッケージのディレクトリがあります。今後もサーバーを追加していくようですが、今はローカルボックスからサーバーへの基本的なrsyncを実行しています。

n台のサーバーにコードを分散するためのより良いアプローチは何でしょうか?

ありがとう

4

3 に答える 3

4

Mercurialファブリックを使用して、すべてのソース コードをデプロイします。Fabric は Python で記述されているため、簡単に始めることができます。本番サービスの更新は簡単fab production deployです。最終的には次のようになります。

  1. すべてのサービスをシャットダウンし、「アップグレード中」ページを表示します。
  2. ソース コード ディレクトリを更新します。
  3. すべての移行を実行します。
  4. すべてのサービスを開始します。

これがすべて自動的に行われるのを見るのはとても素晴らしいことです。

于 2010-06-18T22:45:16.890 に答える
1

まず、ワークステーションからサーバーにコードをコピーする代わりに、リポジトリからコードの新しいバージョンをチェックアウトできるように、すべてのコードをリビジョン管理下に置いてください (まだ行っていない場合)。

リビジョン管理が整っていれば、 Capistranoなどのツールを使用して、各マシンにログインして手動でチェックアウトすることなく、各サーバーのコードを自動的にチェックアウトできます。

このようなセットアップでは、新しいバージョンをすべてのサーバーに展開するのは、実行するのと同じくらい簡単です。

$ cap deploy

ローカル マシンから。

于 2010-06-18T22:35:49.080 に答える
0

私はこれを行うためにバージョン管理も使用していますが、ホスト システムが使用するパッケージ管理 (RPM や dpkg など) を使用してソースをパッケージ化し、カスタム リポジトリを使用するようにシステムをセットアップすることも考えられます。 apt-get upgrade」または「yum update」は、システム上のソフトウェアを更新します。次に、「mussh」などを使用して、すべてのツールで停止/更新/開始コマンドを実行できます。

理想的には、最初に「テスト」リポジトリにプッシュし、ステージング システムにインストールしてもらい、そのテストがサインオフされたら、それを本番リポジトリに移動できます。

これは、一般的にファブリックまたはバージョン管理を使用するという推奨事項と非常に似ていますが、一部の人により適した別の代替手段にすぎません。

パッケージを使用することの欠点は、とにかくバージョン管理を使用している可能性が高く、これらのパッケージのバージョン番号を管理する必要があることです。バージョン管理内でリビジョン タグを使用してこれを行うので、目的のシステムで "svn update" などを簡単に実行できます。

いずれの場合も、あるバージョンから次のバージョンへの移行を検討する必要がある場合があります。ユーザーが他の要素への参照を含むページを読み込んだ場合、更新を実行するとそれらの要素が消えてしまいます。デプロイ スクリプト内、または最初に新しいページを含むバージョンをプッシュするコード内で何かを実行したい場合がありますが、古い参照要素を保持し、それをデプロイしてから、参照要素を削除して後でデプロイします。

このようにして、ユーザーはページ内の壊れた要素を見ることはありません。

于 2010-11-13T06:30:08.110 に答える