Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 防止Rails 2/3缓存库/类_Ruby On Rails_Ruby_Optimization_Caching_Class - Fatal编程技术网

Ruby on rails 防止Rails 2/3缓存库/类

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服务器。在生产环境中,这将严重影响性能,因此被关闭 默认情况下

有人知道如何指示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只加载一次)