11

Capistrano から Chef への切り替えに興味がありますが、すべての要素をまとめるのにいくつか問題があります。

http://wiki.opscode.com/display/chef/Quick+Startに従って、EC2 インスタンスをknife. コードの展開に関しては、 http://wiki.opscode.com/display/chef/Deploy+Resourceにあることをやりたいように見えますが、唯一の問題は、そのページのどこにもどのディレクトリに言及されていないかということです/file デプロイ/to/pathコード ブロックを配置する必要があります。

私が抱えているもう 1 つの問題は、サーバーのセットアップ後にコードの変更をデプロイする方法を理解することです。おそらく、私は現在のワークフロー ( git push && cap deploy) に慣れているだけですが、変更をコミットした後、サーバーに ssh してsudo chef-client? それについての何かが間違っていると感じます。同等のキャップはありませんchef deployか?

最後に (これは少し難しいかもしれませんが)、複数の Rails アプリを 1 つのサーバーにデプロイしようとしています。展開の詳細を説明する各アプリのレポにある種のシェフ構成ファイルを保持することは賢明なようですが、それがシェフレポ/ホストされたサーバーとどのようにやり取りするかはわかりません。各アプリはロールですか? また、物事がどのように機能するかについての私の理解から、「chef-client」が実行時にすべてのアプリケーションをデプロイしようとするという考えにも少し不安があります。git push && cap deploy私は自分が展開しているものを確信しています。一方、他のアプリケーション リポジトリの一部はデプロイ可能な状態ではない可能性があります。このセットアップで 1 つのアプリだけをデプロイする方法はありますか?

4

4 に答える 4

8

つまり、knife は実際にはカピストラーノ風のタスクを実行できます。具体的には、複数のサーバー間でコマンドを実行できます。

すべてのアプリ サーバーにアプリをデプロイするには、opscode rails アプリケーション クックブック パスに従っていると仮定すると、次のようにするだけです。

knife ssh role:t<appserver-role> chef-client -xroot -P<pass>

これにより、すべてのアプリサーバーでルートとしてchef-clientが実行されます。シェフの検索 API を使用して、そのロールを持つすべてのノードを検索し、それらに対してそのコマンドを実行します。

それはかなり強力です。

于 2011-08-16T19:52:33.977 に答える
5

Chef を使用して Ruby on Rails をデプロイする方法について説明した次の記事を書きました。

http://tech.hulu.com/blog/2012/07/06/automating-system-provisioning-and-application-deployment-with-chef/

そうですね... この記事は Rails だけに関するものではありませんが、例の大部分は Rails のデプロイに関するものです。

Ruby on Rails のデプロイに使用できる「アプリケーション」クックブックと呼ばれるコミュニティ クックブックもあります。そのクックブックと比較すると、この記事の例は初心者にとって少し理解しやすいはずです。ただし、この記事の例を使用してそれを行うことに慣れたら、アプリケーションのクックブックを見て、それが自分にとってより意味があるかどうかを確認する必要があります。

于 2012-08-08T07:03:25.230 に答える
3

ナイフsshを使用してオンデマンドでデプロイすることに関する提案は絶対に正しいです。Chefをデプロイメントソリューションとして使用することについてさらに詳しく説明できれば(特にCapistranoのようなツールと比較して)。Chefは、構成管理とシステム統合のためのツールとして設計されています。これは、システムで実行されているすべてのものがべき等であることを意味します。

Chefデプロイメントを使用する場合、Chefの実行が行われたときにすべてを再実行することについて混乱が生じることがあります。Capistranoはシステムに「これを行う」と指示することで機能し、Chefはシステムに「これである」と指示することで機能するため、アプリケーションのバージョンとデータベースが使用するスキーマは通常、属性とデータバッグで定義されます。アプリケーションがすでにデプロイされていて、データベースに適切なスキーマがすでにある場合にChefを実行すると、何も起こらないはずです。アクションは、システムがまだ目的の状態になっていない場合にのみ実行する必要があります。これが、複数のアプリケーションをデプロイする場合でも、すべてを再実行しても問題にならない理由です。

于 2012-07-25T18:27:48.510 に答える
2

私の経験では、Capistrano には、Chef で複製する必要がある RoR 機能がいくつかあるため、維持することをお勧めします。Chef は非常に柔軟なツールであり、多くのことができるため、他の多くのツールの代わりになる可能性があります。個人的には、ターゲットを絞ったツールの方が便利だと思います。

Unicorn 用の Capistrano アドオン、S3 とのアセット同期など ( https://github.com/bokmann/dunce-capなど) は常に非常に便利です。

Ruby on Rails アプリを簡単にデプロイおよび管理する方法として、http://www.cloud66.comもお勧めします。

免責事項: 私は Cloud 66 で働いています。

于 2013-05-07T13:15:34.237 に答える