11

我有兴趣从 Capistrano 切换到 Chef,但是在将所有部分放在一起时遇到了一些问题。

我已经关注了http://wiki.opscode.com/display/chef/Quick+Start并且能够使用knife. 至于代码部署,看起来好像我想做http://wiki.opscode.com/display/chef/Deploy+Resource中的内容,唯一的问题是,该页面上没有提到它在哪个目录中/file 部署/to/path代码块应该去。

我遇到的另一个问题是了解如何在设置服务器后部署代码更改。也许我只是习惯了我当前的工作流程(git push && cap deploy),但我能说的最好的是,在我提交我的更改后,我应该 ssh 到服务器并运行sudo chef-client?感觉有些不对劲。是否没有等效的上限,即chef deploy

最后(也许这有点困难),我希望将多个 Rails 应用程序部署到单个服务器。在每个应用程序的存储库中保留某种厨师配置文件来描述其部署的细节似乎是谨慎的,但我不确定这将如何与厨师存储库/托管服务器进行交互。每个应用程序都是一个角色吗?从我对事物工作方式的理解来看,我对“主厨客户端”会在运行时尝试部署所有应用程序的想法也有点不安。我git push && cap deploy确定我正在部署什么。而其他一些应用程序存储库可能不处于可部署状态。有没有办法在这个设置中只部署一个应用程序?

4

4 回答 4

8

因此,knife 实际上能够执行 capistrano 式的任务——特别是跨多个服务器运行命令。

要将您的应用程序部署到所有应用程序服务器,假设您遵循 opscode rails 应用程序说明书路径,您可以执行以下操作:

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

这将在您的所有应用服务器上以 root 身份运行 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

关于使用knife ssh 按需部署的建议是绝对正确的。如果我可以进一步详细说明使用 Chef 作为部署解决方案(尤其是与 Capistrano 等工具相比)。Chef 被设计为用于配置管理和系统集成的工具,这意味着系统上运行的所有内容都应该是幂等的。

在使用 Chef 部署时,有时会在 Chef 运行发生时重新运行所有内容时产生混淆。请记住,Capistrano 通过告诉系统“做这个”来工作,Chef 通过告诉系统“做这个”来工作,所以应用程序的版本和数据库应该使用的模式通常在属性和数据包中定义。如果应用程序已经部署并且数据库已经具有正确的模式,则当 Chef 运行时,不应发生任何事情,只有在系统尚未处于所需状态时才应采取行动。这就是为什么即使部署多个应用程序重新运行一切都不成问题的原因。

于 2012-07-25T18:27:48.510 回答
2

根据我的经验,最好保留 capistrano,因为它具有一些您必须使用 Chef 复制的 RoR 功能。Chef 是一个非常灵活的工具,您可以使用它做很多事情,因此它可以替代许多其他工具。我个人觉得有针对性的工具更有帮助。

Unicorn 的 Capistrano 插件、与 S3 的 Asset Syncs 和其他插件(如https://github.com/bokmann/dunce-cap)总是非常有用。

作为部署和管理 Ruby on Rails 应用程序的更简单方法,我还可以建议http://www.cloud66.com

免责声明:我为 Cloud 66 工作。

于 2013-05-07T13:15:34.237 回答