Ruby on rails Rails类在生产模式下重新加载

Ruby on rails Rails类在生产模式下重新加载,ruby-on-rails,Ruby On Rails,有没有办法在运行时重新加载ruby模型 例如,我有一个模型 class Model def self.all_models @@all_models ||= Model.all end end 这个模型中的记录很少被更改,但它们确实被更改了,我不想重新加载整个应用程序,只想加载这个类。在开发服务器上,这不是问题。生产服务器是一个大的服务器 实际上,不重新启动服务器是不可行的。最好的方法是在ApplicationController中添加一个before过滤器来更新每个工

有没有办法在运行时重新加载ruby模型

例如,我有一个模型

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

这个模型中的记录很少被更改,但它们确实被更改了,我不想重新加载整个应用程序,只想加载这个类。

在开发服务器上,这不是问题。生产服务器是一个大的服务器

实际上,不重新启动服务器是不可行的。最好的方法是在ApplicationController中添加一个before过滤器来更新每个工作线程中的类变量,但必须在每个请求上都这样做。您无法轻松关闭和打开此行为

如果这是一个资源密集型操作,您可以接受强度较低的测试,例如将数据库中的值/文件的上次修改时间与运行时定义的常量进行比较,以确定是否应该进行完全重新加载。但你仍然需要在每个请求中都这样做

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

也许还有别的办法,但我根本没试过。所以没有保证。 如果您使用的是基于ruby的服务器,例如mongrel。理论上,您可以使用更新控制线程中的模型/路由/变量,工作线程就是从该线程派生的。

我发现了这一点,但它仅用于Rails.cache,而不是静态变量