在生产模式下重载Rails类

问题描述 投票:1回答:1

有没有一种方法可以在运行时重新加载ruby模型?

例如我有一个模特

class Model
  def self.all_models
    @@all_models ||= Model.all
  end    
end

此模型中的记录很少更改,但后来它们做了,我不想重新加载整个应用程序,仅此一类。

ruby-on-rails
1个回答
0
投票

在开发服务器上,这不是问题。 生产服务器非常重要。

实际上,不重新启动服务器是不可行的。 最好的办法是在ApplicationController中添加一个before过滤器,以更新每个工作线程中的类变量,但是必须在每个请求上都执行此操作。 您不能轻易地关闭和打开此行为。

如果这是资源密集型操作,则可以满足要求较低的测试要求,例如将数据库/文件的最后修改时间中的值与运行时定义的常量进行比较,以确定是否应该进行完全重新加载。 但是您仍然必须将其作为每个请求的一部分。

但是,据我所知,一旦服务器被加载,修改路由是不可能的。 修改其他站点范围的变量可能需要更多的精力,例如从文件/数据库读取数据并在before过滤器中进行更新。

可能还有另一种方法,但是我根本没有尝试过。 因此无法保证。 如果您使用的是基于红宝石的服务器,例如mongrel。 从理论上讲,您可以使用劫持来更新从中产生工作线程的控制线程中的模型/路由/变量。

© www.soinside.com 2019 - 2024. All rights reserved.