Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment Heroku部署过程到底是如何工作的?_Deployment_Heroku - Fatal编程技术网

Deployment Heroku部署过程到底是如何工作的?

Deployment Heroku部署过程到底是如何工作的?,deployment,heroku,Deployment,Heroku,当我将新版本的服务部署到Heroku时,会发生什么 假设我现在有N个网络动态节点在线,其中M个当前正在为请求提供服务 在新版本开始上线之前,它们是否都关闭了?当前正在服务的任何挂起请求会发生什么情况 有停机时间吗?(假设我只有一个无状态服务,没有任何迁移) 是否有用于执行自定义迁移(例如迁移数据库表)的钩子 我是否可以启动运行新版本的N台服务器,让它们开始服务请求,并且仅在不服务任何请求时才关闭以前的N台服务器 答案是否取决于堆栈/语言?(Aspen/Bambol/Cedar、Ruby/Nod

当我将新版本的服务部署到Heroku时,会发生什么

假设我现在有N个网络动态节点在线,其中M个当前正在为请求提供服务

  • 在新版本开始上线之前,它们是否都关闭了?当前正在服务的任何挂起请求会发生什么情况
  • 有停机时间吗?(假设我只有一个无状态服务,没有任何迁移)
  • 是否有用于执行自定义迁移(例如迁移数据库表)的钩子
  • 我是否可以启动运行新版本的N台服务器,让它们开始服务请求,并且仅在不服务任何请求时才关闭以前的N台服务器
  • 答案是否取决于堆栈/语言?(Aspen/Bambol/Cedar、Ruby/Node.js/Java/…)

我没有任何关于这方面的官方文件,只是相反的帖子(有人说很热)。是否有关于部署过程和上述问题的官方详细信息?

我可以回答此问题的“是否有用于执行自定义迁移(例如,迁移数据库表)的钩子?”。我通过编写一个shell脚本来处理运行迁移,该脚本在发出“git-push-heroku”之后立即执行“heroku-rake-db:migrate”。我不知道是否有更“hook”-y的方法来实现这一点。

以下是Heroku部署期间发生的情况(当前为2011年10月20日*)[1]:

  • Heroku收到你的git推送
  • 新版本是根据应用程序的最新版本编译并存储的
  • [这些几乎同时发生]
    • dyno网格收到终止[2]应用程序所有运行进程的信号
    • dyno网格将发出信号,启动应用程序的新进程
    • dyno网格会发出信号,以统一应用程序的所有空闲进程
    • HTTP路由器收到信号,开始将HTTP流量路由到运行新版本的web dynos
一般的做法是,为了尽量减少任何可能的停机时间,您应该尽量减少应用程序的启动时间

通过遵循谨慎的迁移实践,可以推送新代码,然后在应用程序运行时进行迁移。 以下是Rails的一个示例:

要在重新启动过程中最大限度地减少断开的连接,请使用一个webserve,该webserve通过正常关闭(完成现有连接,不要使用新连接)来适当响应SIGTERM。较新版本的将正确处理SIGTERM

  • 这个问题是内部讨论较多的话题,可能会引起争议 未来的变化
  • SIGTERM在10秒后出现SIGKILL if 还在运行

  • Heroku或任何其他专有框架在这里似乎不太受欢迎。@RHT-1725问题似乎“足够受欢迎”,不是吗?你是对的,那么它很受欢迎,我认为它是专有的吗?Heroku是一家云托管提供商。您将web应用程序上载到Heroku,Heroku会自动运行。如果您使用它,则可以通过rake deploy在部署过程中执行类似操作,您还可以设置HTTP deploy挂钩,调用应用程序本身上的端点,从而触发迁移等。感谢提供详细信息。你是Heroku的员工吗?如果没有,你在哪里找到了细节?另外,了解哪些受支持的web服务器提供了如您所述的优雅关机功能也是很有意思的。。。也许这适合另一个问题。