运行是否安全
Klass.reset_column_information
Klass.connection.schema_cache.clear!
在Rails应用程序运行时进行生产吗?
我想要执行零停机部署,并在后台迁移完成后启动功能。后台迁移正在创建新表,因此它们会很快完成。
从我的简短调查中了解到,如果重新启动了Rails应用服务器并且尚未创建表,则
Klass
(当然继承自ActiveRecord::Base
)将缓存表尚不存在的事实,在生产环境中启动Rails应用程序的急切加载过程期间。只要在使用与
Klass
相关的特性的代码的某个部分中表不存在,我就希望检查是否存在名称为Klass.table_name
的表,并尝试重新加载其模式。经过一段时间(分钟),表将通过后台迁移创建,稍后再重新加载模式,我就可以使用新功能了。我不担心性能影响,因为这个特性并不经常使用,而且在迁移完成之前,它很可能不会被触发甚至一次。
TLDR:
部署Rails应用程序 重启Web服务器 开始运行后台迁移 功能不活动 完成运行后台迁移 功能活动
那就是该过程。
我知道我可以将其分成两个部分进行部署。在旧代码运行时添加新表,然后部署需要这些表的功能。但是,我想知道是否可以通过一次部署实现工作解决方案。我希望避免因新功能而进行两个部署以实现零停机部署。