使用Rails&amp ;;在EC2上自动缩放Capistrano部署

时间:2012-11-09 07:31:30

标签: ruby-on-rails amazon-ec2 amazon-web-services capistrano

是否有一种通用策略来设置自动扩展的脚本以更新capistrano部署层次结构中的代码,以便在自动扩展事件上启动AMI时从存储库中提取,以确保在自动扩展计算机上运行的提交与提交时的提交相匹配非自动缩放实例?

2 个答案:

答案 0 :(得分:11)

我运行的设置有点像这样。我选择不设置实例以便在启动时与git进行交互,因为:

  • 我希望实例快速启动(部署+捆绑安装可能需要一段时间)
  • 我想扩展/替换实例以不依赖于GitHub,rubygems等
  • 我希望将实例扩展为非常简单

我所做的是我部署的应用程序位于/ var / www / myapp。这实际上是一个单独的EBS卷,安装在该位置。文件系统是xfs,因为您可以使用xfs_freeze安全地获取已装入卷的ebs快照

部署完成后,在钩子后的capistrano中我快照/ var / www / myapp卷。然后,我将自动扩展启动配置的块设备映射更新为"当您启动实例时,从快照创建一个新卷并将其附加到/ dev / sdf。

启动时所有实例都要在/ var / www / myapp上安装该设备,方法是编辑/ etc / fstab或运行超级简单的启动时脚本。 Bundler设置为将其宝石保存在/ var / www / myapp / shared中,以便宝石得到照顾

答案 1 :(得分:2)

万一有人落到这里,我发现了这个宝石:

https://github.com/lserman/capistrano-elbas

将(如自述文件中所述):

  
      
  • 将代码部署到连接到给定AutoScale组的每个正在运行的实例
  •   
  • 部署后,从其中一个正在运行的实例
  • 创建AMI   
  • 将AMI与新代码附加到新的AWS Launch Configuration
  •   
  • 更新AutoScale组以使用新的启动配置
  •   
  • 删除ELBAS创建的所有旧AMI
  •   
  • 删除ELBAS创建的所有旧启动配置
  •   

因此,它确保自动扩展组的所有实例(正在运行的那些实例和那些 future )将运行相同的代码。

希望这有帮助