推向Heroku的一个坏处是我必须在运行我的数据库迁移之前推送代码(并自动重启服务器)。在Heroku上无需停机热部署
这显然会导致用户在导航网站时出现大约500个错误,导致新代码没有新的表格/属性:Heroku提出的解决方案是使用维护模式,但是我想要一种没有负面影响的方式让我的web应用程序每次运行!
有没有办法?例如与Capistrano的:
- 我编写的代码在一个新的目录来部署
- 我跑(向后)迁移和旧代码继续工作完全
- 我SWITH杂种实例到新的目录和重启服务器
......我没有停机!
推向Heroku的一个坏处是我必须在运行我的数据库迁移之前推送代码(并自动重启服务器)。在Heroku上无需停机热部署
这显然会导致用户在导航网站时出现大约500个错误,导致新代码没有新的表格/属性:Heroku提出的解决方案是使用维护模式,但是我想要一种没有负面影响的方式让我的web应用程序每次运行!
有没有办法?例如与Capistrano的:
......我没有停机!
Heroku无法通过capistrano进行部署。你是由heroku发布的工具阻止。
在所有情况下,无停机时间系统是不可能的。如何在不停止服务器的情况下通过大改变来改变您的架构如果你不停止它,你可以避免一些改变,你的数据库可能会不一致。所以维护页面的使用是一个正常的解决方案。
如果你想要一个小的解决方案来避免问题是在两台服务器中进行平衡。一个在迁移期间只能读取数据库。您可以在迁移过程中切换到此实例,以避免维护页面。迁移后,你会回到你的主人。
改进这个过程的唯一方法是这个家伙建议的。这还不是一个热部署场景,但:
http://casperfabricius.com/site/2009/09/20/manage-and-rollback-heroku-deployments-capistrano-style/
有一件事我会建议只是第一个是推你的移民达的Heroku和运行它们你推你的代码之前。这将需要将迁移作为独立提交进行提交,并且每次都要手动推送它们(这并不理想)。我很惊讶,现在所有在Heroku上托管的大型应用程序都没有更好的解决方案。
,你可以设置一个第二Heroku的应用程序,它指向同一个DB作为主要的生产应用,并使用辅助应用不中断生产(假设迁移不会破坏你的应用程序的以前版本)运行数据库迁移。
让我们打电话给Heroku应用程序生产和步骤。
你展开序列将成为类似:
git push heroku staging
heroku run -a staging-app rake db:migrate
git push heroku production
分期的应用程序不会花费你任何东西,因为你不会需要超过Heroku的自由层,这将是非常容易的设置耙部署脚本来自动为你做到这一点。
祝你好运!
如果您可以同时在同一个应用程序中同时使用同一个应用程序的两个版本,Heroku现在具有预引导功能。
正确的链接现在是:https://devcenter.heroku.com/articles/preboot – 2015-05-20 01:00:00
实际上,你会有一些停机时间,Heroku的重新启动您的应用程序。他们有取出旧的前启动新DYNOS一个新的功能,称为预引导:https://devcenter.heroku.com/articles/labs-preboot/
至于数据库迁移,该文章链接到这一项就如何处理这个问题:http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/
我第一提交迁移,运行它们,然后推动其余的代码。添加一个文件,如下所示:
git commit -m 'added migration' -- db/migrate/2012-your-migration.rb
Hi shingara, 对不起,但我不同意你的看法。 我不想为此使用负载平衡:Heroku的一个重要特性是必要的“透明”云功能,我想使用此功能......要在Heroku中实现负载均衡,我必须保留两个不同的应用程序和只读数据库可能会给我的用户带来问题。 而一个没有停机系统是不可能的。我用正确的系统解释了没有停机时间。如果发生大的变化而没有兼容减法的数据库模式的可能性,我可以使用维护页面:但这是我所有情况的5%... – zetarun 2010-04-01 15:06:47
您可以使用CouchDB避免此答案中描述的问题,例如。 – iconoclast 2011-03-23 00:00:45