2011-07-29 6 views
11

私はCapistranoからChefに切り替えたいと思っていますが、いくつかの問題をすべてまとめています。シェフ展開ですか?

私はhttp://wiki.opscode.com/display/chef/Quick+Startに続き、knifeでEC2インスタンスを開始することができました。コードの展開までは、http://wiki.opscode.com/display/chef/Deploy+Resourceにあるものを実行したいと思っているように見えますが、唯一の問題は、そのページ上のどこにでも/ deployファイル/to/pathコードブロックがどのディレクトリにあるかを記述していないことです。

私が気付いている別の問題は、サーバーの設定後にコードの変更を展開する方法を理解することです。多分私は現在のワークフロー(git push && cap deploy)に慣れていますが、変更内容をコミットした後にサーバにsshしてsudo chef-clientを実行すると、最高の状態を確認できます。それについての何かが間違っていると感じます。キャップ相当額はありませんか?つまり、chef deploy

最後に(これはもう少し難しいですが)、私は複数のレールアプリを1台のサーバに配備することを検討しています。デプロイメントの詳細を記述した各アプリケーションのレポに何らかのシェフ設定ファイルを保存することは賢明ですが、どのようにシェフ・レポ/ホストされたサーバと連携するのかは不明です。それぞれのアプリは役割を果たすだろうか?そして、私が仕事の仕方を理解してから、シェフクライアントは、実行するとすべてのアプリケーションを配備しようとしているという考えでは少し不安です。 git push && cap deployで私は展開していることを確信しています。一方、他のアプリケーションreposのいくつかは、展開可能な状態にないかもしれません。この設定でただ1つのアプリを展開する方法はありますか?

+0

のために働くのシェフと一緒に?それはちょうどいつも何らかの理由で私に間違って感じた。 – noli

+0

おそらく私は "私はシェフに切り替える必要があるかどうかを知ることに興味がある"と私の質問の紹介に言い換えるべきです...私は現在[ゴム](https: //github.com/wr0ngway/rubber/wiki)を参照してください。それは十分に機能しますが、同じインスタンス上の複数のアプリケーションをサポートしていません(これはすぐに私の要件になりつつあります)。私は非レールプロジェクトを展開しているので、サーバーをプロビジョニングし、ブートストラップし、さまざまなプロジェクトを展開できる単一のツール/ワークフローのアイデアに非常に興味があります。 – james

答えて

8

だから、ナイフは実際にカイストラーノ風の作業を行うことができます。具体的には、複数のサーバー間でコマンドを実行します。

あなたはopscodeは、Railsアプリケーションの料理の道を歩んで想定して、アプリのすべてのサーバーにアプリケーションをデプロイするには、次の操作を行いばかりでした:すべての上でrootとしてシェフ・クライアントを実行します

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

あなたのアプリサーバー。シェフ検索APIを使用して、その役割を持つすべてのノードを検索し、そのコマンドを実行します。

かなり強力です。

+2

正しく理解すれば、検索で返されたノードのすべてのレシピが実行されますか?つまり、[Deploy Resource](http://wiki.opscode.com/display/chef/Deploy+Resource)の場合、実行したい操作(特定のリビジョンの展開、ロールバックなど)は、展開レシピのアクションとリビジョン属性を変更し、レシピをシェフサーバーにプッシュして、上記のコマンドを発行しますか? – james

3

オンデマンドで展開するためのナイフsshの使用に関する提案は間違いありません。シェフを展開ソリューションとして使用することについてさらに詳しく説明できれば(特にCapistranoのようなツールと比べて)。シェフは、設定管理とシステム統合のためのツールとして設計されています。これは、システム上で実行されるすべてが冪等でなければならないことを意味します。

シェフの実行時にすべてを再実行することについて、シェフの展​​開を使用すると混乱することがあります。 Capistranoはシステムに「これを行う」ということを教えて働きます。シェフはシステムに「これ」と言って動作します。アプリケーションのバージョンとデータベースが使用するスキーマは通常、属性とデータバッグで定義されます。アプリケーションがすでにデプロイされていてデータベースがすでに適切なスキーマを持っている場合、シェフが実行されても何も起こらない場合は、システムがまだ希望の状態にない場合にのみアクションを実行する必要があります。このため、複数のアプリケーションを展開しても、すべてを再実行しても問題ではありません。

5

シェフを使ってRuby on Railsを配備する方法について説明した次の記事を書きました。

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

うーん...この記事は、ちょうど約Railsのではなく、例のライオンのシェアは、レールの展開についてです。

Ruby on Railsを展開するために使用できる「アプリケーション」料理ブックというコミュニティの料理本もあります。その料理本と比較して、この記事の例は、新しい人のために理解しやすいはずです。ただし、記事の例を使用してそれを行うことに慣れてしまった場合は、アプリケーションのクッキングブックを見て、それがあなたにとって理にかなっているかどうかを確かめてください。

+0

リンクが存在しません。 – kvivek

2

私の経験では、Capistranoにはシェフと複製する必要のあるRoR機能があるため、保管しておく方がよいでしょう。シェフは非常に柔軟なツールであり、多くのことができますので、他の多くのツールを置き換えることができます。個人的には、ターゲットツールがより役立つことがわかります。

UnicornのCapistranoアドオン、S3などのAsset Syncs(これはhttps://github.com/bokmann/dunce-capなど)は常に非常に便利です。

のRailsアプリにルビーを展開し、管理するための簡単な方法として、私はまた、http://www.cloud66.com

免責事項提案することができます:私はなぜあなたは展開に切り替えるしようとしている、ただ好奇心からクラウド66