有没有办法在运行时重新加载ruby模型?
例如我有一个模型
class Model
def self.all_models
@@all_models ||= Model.all
end
end
这个模型中的记录很少被改变,但是他们做了,我不想重新加载整个应用程序,只需要这一个类。
答案 0 :(得分:0)
在开发服务器上,这不是问题。生产服务器很重要。
实际上,重新启动服务器是不可行的。您可以做的最好的事情是在ApplicationController中添加一个before过滤器来更新每个工作线程中的类变量,但必须在每个请求中完成。您无法轻松关闭此操作。
如果是资源密集型操作,您可以解决一个不太密集的测试,例如将数据库中的比较值/文件的上次修改时间与运行时定义的常量进行比较,以确定是否应该发生完全重新加载。但是你仍然需要在每个请求中执行此操作。
但是,据我所知,一旦加载服务器就无法修改路由。修改其他站点范围的变量可能需要更多的努力,例如从文件/数据库读取和在过滤器之前更新。
可能有另一种方式,但我根本没有尝试过。所以不能保证。 如果您使用的是基于ruby的服务器,例如mongrel。从理论上讲,您可以使用hijack来更新控制线程中的模型/路由/变量,从中生成工作线程。