2014-01-19 22 views
2

它是安全的运行在Rails生产应用程序中清除列缓存安全吗?

Klass.reset_column_information 
Klass.connection.schema_cache.clear! 

生产,而Rails应用程序运行?

我想做零停机时间部署,并且在后台迁移完成运行后开始工作。后台迁移正在创建新表,因此它们将很快完成。

从我在短期研究中收集的内容。如果我的Rails应用程序服务器重新启动并且表尚未创建,Klass(当然继承自ActiveRecord::Base)会在生产中引导Rails应用程序时的预先加载过程期间缓存表尚未存在的事实。

只要当使用与Klass功能我的代码部分被击中我想检查是否存在名为Klass.table_name表的存在,并尝试重新加载其架构中的表不存在。在一段时间内(分钟),表格将通过后台迁移创建,最后一次重新加载模式,我可以使用我的新功能。

我不担心性能影响,因为此功能不常使用,并且在迁移完成运行之前很可能不会触发一次。

TLDR:

  • 部署Rails应用程序
  • 重启Web服务器
  • 开始运行的后台迁移
  • 功能无活性
  • 结束正在运行的后台迁移
  • 功能活跃

这将是程序。

我知道我可以将它分成两个部署。在旧代码运行时在后台添加新表,然后执行需要这些表的功能部署。但是我想知道我是否可以通过一次部署就能获得一个工作解我想避免为部署零宕机时间而对两项新功能进行部署。

+0

否则当你已经挂起的迁移是相当棘手的零时间部署。 – bronislav

回答

0

你应该看看Capistrano,它提供了你正在寻找的所有功能。

  • 部署新的代码到一个新的目录(非实时)
  • 运行未决迁移
  • 运行任何其他部署任务,如资产汇编等
  • 重新指向了“活”网站的新代码使用符号连接
  • 重新启动应用服务器

下面是该项目:

https://github.com/capistrano/capistrano

这是一个很好的教程(需要亲成员):

http://railscasts.com/episodes/373-zero-downtime-deployment

+0

如果您没有挂起迁移,此解决方案可用于零时间部署。迁移数据的必要性可能会给您带来意想不到的麻烦。 – bronislav

+0

在上线之前,您应该在非现场环境中测试部署本身。使用'cap deploy:migrations'进行部署将确保在部署期间为您运行您的迁移。 – Jon

+0

你是对的。如果站点在迁移过程中可以访问,则可能会导致数据库不一致。 – bronislav

相关问题