【问题标题】:Update column information for every process更新每个进程的列信息
【发布时间】:2020-05-06 16:35:49
【问题描述】:

在应用内运行迁移后:

ActiveRecord::Migration.add_column :table, :column, :type

并更新栏目信息:

Model.reset_column_information

似乎列信息仅针对一个进程更新,即 Puma 工作进程或乘客进程。

有没有办法为每个进程更新它而不必像这样重新启动进程?

touch tmp/restart.txt

【问题讨论】:

  • 我不这么认为。列信息缓存在每个类(单例类实例)中,并且 rails 没有对其他进程中的类实例的引用。虽然这会是一个问题,但它不像您经常运行迁移那样。

标签: ruby-on-rails ruby activerecord process migration


【解决方案1】:

您可以发明自己的方式在每个进程中调用列缓存清除,例如调用该代码的信号处理程序或控制器操作操作。但实际上,更好的方法是重新启动,因为上面的其他方法会深入到您的依赖关系中并因此锁定它们(一旦您过于依赖其进程模型,您将无法轻松更改 Web 服务器)。

另外请记住,通过绕过 rails 迁移流程,您的 schema.rb 将不会反映服务器的状态。

PS。这看起来像 XY problem,可能您的实际问题出在您的数据库设计中,所以再看看它 - 运行时迁移提示非最佳解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多