2010-01-12 67 views
1

重装有没有办法重装红宝石模型在运行?Rails的班生产模式

比如我有一个模型

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

记录在这个模型中被改变很少,但他们做的,我不想重新加载整个应用程序,仅此一类。

+0

我发现这个http://zilkey.com/2008/7/5/rails-cache-memcached-development-mode-and-offline-cache-invalidation 但它只能用于Rails.cache ,而不是静态变量 – balepc 2010-01-12 15:35:26

回答

0

在开发服务器,这是没有问题的。生产服务器是一个很大的服务器。

在现实中,它不是没有重新启动服务器是可行的。最好的办法是在ApplicationController中添加一个before过滤器来更新每个工作线程中的类变量,但必须在每个请求中完成。您无法轻松关闭此行为。

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

但是,据我所知修改路由一旦已加载的服务器是不可能的。修改其他网站范围的变量可能需要更多的努力,比如从文件/数据库中读取数据并在之前的过滤器中更新。

有可能是另一种方式,但我还没有尝试过的。所以没有保证。 如果您使用基于ruby的服务器,如杂种。从理论上讲,您可以使用hijack更新控制线程中的模型/路线/变量,工作线程从中生成。