2016-03-21 1 views
0

私は共有ライブラリを持っています。これは、その名前のとおり、DRYを避けるために異なるプロジェクト間で共有されるプロジェクトです。共有ライブラリはGITリポジトリと他のアプリケーション(app1、app2、app3)です。Capitranoはダウンタイムなしで同時に2つのアプリケーションを展開します

app1をデプロイするときは、まずsharedとapp1をデプロイしたいと思います。 app2とapp3と同じです。ダウンタイムを避けるために、共有ライブラリはapp1と同時にデプロイする必要があります。したがって、基本的にdeploy:symlink:releaseは、両方のデプロイメントの終了時に実行する必要があります。

共有ライブラリ内のコードの変更は私がこれまでに成功したセットアップカピストラーノは個別のアプリを展開する必要があり、それに依存しているすべてのプロジェクトも同時に

で展開されていることを確認する必要があります。いくつかの読書の後、私は今、カフを使用していますが、それは私がこの問題を解決するのを手助けしてくれないようです。私は現在、使用しています何

namespace :app1 do 
task :deploy do 
    run_locally do 
     execute 'cap apps:shared staging deploy --dry-run', raise_on_non_zero_exit: true 
     execute 'cap apps:app1 staging deploy --dry-run', raise_on_non_zero_exit: true 
     execute 'cap apps:shared staging deploy', raise_on_non_zero_exit: true 
     execute 'cap apps:app1 staging deploy', raise_on_non_zero_exit: true 
    end 
end 
end 

実行の問題は、共有が更新される間、そのAPP1は、ダウンタイムを経験され、APP1が展開されています。

この問題を解決するためのベストプラクティスは何ですか?カピストラノの流れをオーバーライドして、タスクの終わりにシンボリックリンクのみを実行する方法はありますか?

+0

新しいアプローチがあります。この回答をご覧くださいhttp://stackoverflow.com/a/40921589/2067375。 (免責事項:私は宝石の所有者です) –

答えて

1

異なる人が異なる回答をするのではなく、各プロジェクトにその配備内に共有ライブラリを含めることをお勧めします。コードが大量であるか、実際には(共有構成の変更などの)並行して展開する必要がある場合を除き、通常これにはほとんど欠点がありません。 PHPを使用している場合は、このためにComposerを使用できます。 Rubyでは、Bundler。どちらもGitエンドポイントを指すことができます。

GemsがCapistranoで動作する方法です。Capistrano::Bundlerは、そのアプリのすべての宝箱のユニークでアプリごとのコピーをshared/bundlerにコピーします。

編集:

のGitリポジトリから作曲共有ライブラリを追加するには、次の2つの主要なオプションがあります。

  1. があなたのライブラリにcomposer.jsonファイルを追加します(これを行うのは可能/やすくなりますPSR-4オートローディング)。手順はこちらhttps://getcomposer.org/doc/05-repositories.md#using-private-repositories
  2. 作曲家はあなたのライブラリを盲目的に取り込み、vendor/に貼り付けましたか?こちらの手順:https://getcomposer.org/doc/05-repositories.md#package-2

Composerの使用に関する特定の質問がある場合は、新しい質問を投稿することをおすすめします。私がComposerをよく知っている他の人はおそらくあなたを助けるでしょう。私は、他のツールとほとんど同じくらいComposerを使っていません。

+0

私は共有ライブラリもGITリポジトリであると述べました。カピストラノの設定ファイルに2つのGITリポジトリを指定する方法はありますか?または、アプリの配備内に共有ライブラリをどのように含めるとしますか? –

+0

1つのCapistrano設定で2つのgit reposをデプロイすることはできません。 2番目の質問に答えるために、私は質問する必要があります:どの言語/フレームワークはあなたのアプリですか?異なるシステムは、共有ライブラリを別々に使用します。 –

+0

私は現在、PHP +コンポーザーの設定を行っています。共有ライブラリは、共有された構成とコンポーネントを組み合わせたものです。 –

関連する問題