【问题标题】:best way to bundle update on server while booting引导时在服务器上捆绑更新的最佳方法
【发布时间】:2014-04-19 11:18:55
【问题描述】:

我有一个配置了生产代码设置的 AMI。我使用 Nginx + unicorn 作为服务器设置。 我面临的问题是,每当流量增加时,我需要启动实例登录到实例并执行 git pull、bundle 更新以及预编译资产。这很耗时。所以我想避免所有这些过程。

现在我想使用一个脚本/流程,在我从该 AMI 启动一个新实例时,我可以在其中自动化整个部署流程,例如 git pull、捆绑更新和预编译。

有没有最好的方法来完成这项工作?任何帮助,将不胜感激。

【问题讨论】:

  • capistrano 有很多任务,您可以编写包更新/安装的配方并重新启动unicorn(重新启动杀死工作人员并启动它们)。

标签: ruby git amazon-ec2 bundle unicorn


【解决方案1】:

您可以将您的代码放在/etc/rc.local 中(该文件中的命令将在服务器加载时执行)。

但最好的方法是使用 (capistrano)。您需要将require "capistrano/bundler" 添加到您的 deploy.rb 文件中,并且会自动运行包更新。更多信息可以阅读这篇文章:https://semaphoreapp.com/blog/2013/11/26/capistrano-3-upgrade-guide.html

【讨论】:

    【解决方案2】:

    另一种方法是将您的应用部署到单独的 EBS 卷(您仍然可以将其安装在 /var/www/application 内或当前所在的任何位置)

    部署后,您创建此卷的 EBS 快照。当您创建一个新实例时,您告诉 ec2 从快照中为您的实例创建一个新卷,因此该实例将从已安装的最新 gems/code 开始(我发现 bundle install 可能需要几分钟)。您的所有启动脚本需要做的就是安装卷(或者如果您在制作 ami 时已将其添加到 fstab,那么您甚至不需要这样做)。我更喜欢像这样没有依赖关系的扩展操作(例如,如果 github 或 ruby​​gems 在您需要部署时出现中断,您会怎么做)

    您甚至可以通过使用亚马逊的自动缩放服务更进一步。简而言之,您创建一个启动配置,您可以在其中指定 ami、实例类型、卷快照等。然后您可以根据固定时间表或基于 cloudwatch 指标手动(通过 Web 控制台或 api)控制组大小。 Amazon 将使用您的启动配置中的信息根据需要创建或销毁实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多