Ruby on rails 防止Rails 2/3缓存库/类
有人知道如何指示rails不要缓存lib文件夹中包含的类吗?通过“缓存类”,我想你的意思是,在处理新请求之前,应用程序目录中的源文件会在开发环境中自动重新加载 这与缓存无关,Ruby的正常行为是,只要进程运行,就一次又一次地读取和解析源文件。Rails(实际上是ActiveSupport::Dependencies)提供了一种在处理请求之前重新加载整个代码的机制。在开发环境中,这是很有用的,因为您不希望每次更改代码都重新启动本地Web服务器。在生产环境中,这将严重影响性能,因此被关闭 默认情况下,应用程序类被标记为可重新加载。在开发环境中处理请求之前,您可以使用Ruby on rails 防止Rails 2/3缓存库/类,ruby-on-rails,ruby,optimization,caching,class,Ruby On Rails,Ruby,Optimization,Caching,Class,有人知道如何指示rails不要缓存lib文件夹中包含的类吗?通过“缓存类”,我想你的意思是,在处理新请求之前,应用程序目录中的源文件会在开发环境中自动重新加载 这与缓存无关,Ruby的正常行为是,只要进程运行,就一次又一次地读取和解析源文件。Rails(实际上是ActiveSupport::Dependencies)提供了一种在处理请求之前重新加载整个代码的机制。在开发环境中,这是很有用的,因为您不希望每次更改代码都重新启动本地Web服务器。在生产环境中,这将严重影响性能,因此被关闭 默认情况下
unloadable
class方法标记要重新加载的任意类:
class MyClass
unloadable # mark this class as reloadable before a request is processed
# …
end
注意,并非每个类都能很好地处理卸载。只要在一个源文件中定义类,并通过Rails的自动加载机制找到和加载,您可能就做得很好。但是如果你在别处重新打开你的类来monkeypatch它可能会遇到麻烦,因为自动加载不会捕捉到这一点。这也可以通过不使用
lib/
目录来实现,而是通过在app/helpers
目录中存储任何类或帮助文件来实现。这样,它们将在开发期间重新加载,并在生产期间缓存。不完全如此。我的意思是,当我将一个类(使用require和include)加载到我的应用程序中时。然后,每当在另一个页面或另一个请求上使用该类时,rails不再需要该文件(加载该文件),它只是使用以前加载的类(因为它保留在内存中)。这会让人沮丧,因为每次修改包含的lib类时,我都需要重新加载rails服务器。我在开发模式下运行它,配置缓存类设置为false。Rails重载机制可能只在Rails的自动加载覆盖了您的类的情况下才起作用,而不是在您需要手动加载的情况下。我建议让您的类通过Rails自动加载来加载,这非常方便(您不需要它,它可以在任何地方工作)。如果不可能,您可以尝试利用Rails的自动加载功能,将类文件加载到自动加载所覆盖的文件中(但请确保使用#load,而不是#require,因为require只加载一次)