【发布时间】:2014-01-19 13:43:35
【问题描述】:
跑步安全吗
Klass.reset_column_information
Klass.connection.schema_cache.clear!
在 Rails 应用程序运行时投入生产?
我想进行零停机时间部署,并在后台迁移完成运行后让某个功能开始工作。后台迁移正在创建新表,因此它们将很快完成。
根据我在简短研究中收集到的信息。如果我的 Rails 应用程序服务器重新启动并且尚未创建表,Klass(当然继承自 ActiveRecord::Base)将缓存表尚不存在的事实,在生产中启动 Rails 应用程序的急切加载过程中。
只要当我使用与Klass 相关的功能的部分代码被命中时该表不存在,我想检查名为Klass.table_name 的表是否存在并尝试重新加载其架构。在一段时间(几分钟)后,该表将由后台迁移创建,稍后重新加载架构,我可能会使用我的新功能。
我不担心性能影响,因为此功能不经常使用,而且很可能在迁移完成运行之前甚至不会触发一次。
TLDR:
- 部署 Rails 应用
- 重启网络服务器
- 开始运行后台迁移
- 功能不活跃
- 完成运行后台迁移
- 功能活跃
这就是程序。
我知道我可以将它分成两个部署。在旧代码运行时在后台添加新表,然后部署需要这些表的功能。但我想知道我是否可以通过一次部署获得一个可行的解决方案。我想避免为了实现零停机部署而对新功能进行两次部署。
【问题讨论】:
-
在有待迁移的情况下进行零时间部署非常棘手。
标签: ruby-on-rails rails-migrations