微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 如何在不放下应用的情况下推送到Heroku

只是想知道每个人如何在Heroku上将更新推送到他们的生产服务器,而不会让应用程序停机几秒钟?

推送到Heroku(特别是使用像Unicorn这样的东西)需要一段时间才能加载Web应用程序.特别是当有最终用户试图访问该网站时.他们最终得到503页.加载Unicorn进程需要30秒到一分钟.

解决方法

你需要做两件事才能做到这一点,这并非易事.

1)迁移需要向后兼容(即,在应用程序运行时运行).请参阅此文章http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/

2)使用两个heroku应用程序进行部署.我和Heroku就这个主题开了一张票,这是他们的答复:

We’re currently working on a solution to provide a zero-downtime
deploy but do not have an ETA on when this might be available.

In the meantime a workaround that might be possible would be to deploy
to two separate apps. You can push new code to the second app,spin it
up,then move the domain names over to the second app. Wash and repeat
on the next deploy. This is less than ideal but might get you the
desired result in the interim.

如果你这样做,你会希望尽可能自动化,因为有很多方法可以搞砸了.这是一篇关于该主题文章http://casperfabricius.com/site/2009/09/20/manage-and-rollback-heroku-deployments-capistrano-style/

为什么?

必须同时完成这两个解决方案,因为数据库迁移必须在代码的两个(实时和即时)版本中工作.一旦你有了这个工作,那么你可以解决第二个问题,让应用程序本身看起来不像它已经失效.一旦推动开始,就没有支持的方式来旋转和降低单个动态.

更新:
Heroku现在提供测试版功能.要在推送之前执行以下操作:

heroku labs:启用-a APP_NAME预启动

这将在推送期间更改应用程序的行为.它将推升一个将热身两分钟的并行实例.推送几乎两分钟后,所有流量都将路由到新的应用程序.如上所述,请注意迁移,因为它们仍然是一个问题.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐