阻止Rails 2/3缓存Lib/Classes

mat*_*sko 9 ruby optimization caching ruby-on-rails class

有谁知道如何指示rails不缓存lib文件夹中包含的类?

Zar*_*ony 9

通过"缓存类",我想你的意思是,在处理新请求之前,app目录中的源文件会自动在开发环境中重新加载吗?

这与缓存无关,Ruby的正常行为是一次读取和解析源文件,只要进程运行就不会再次.Rails(ActiveSupport :: Dependencies实际上)提供了一种在处理请求之前重新加载整个代码的机制.在开发环境中,这很有用,因为您不希望为代码执行的每个更改重新启动本地Web服务器.在生产环境中,这会严重影响性能,因此会被关闭.

默认情况下,应用程序类标记为可重新加载.您可以使用unloadableclass方法在开发环境中处理请求之前标记要重新加载的任意类:

class MyClass
  unloadable # mark this class as reloadable before a request is processed

  # …
end
Run Code Online (Sandbox Code Playgroud)

请注意,并非每个班级都可以很好地卸载.只要您在一个源文件中定义您的类,该文件由Rails的自动加载机制找到并加载,您可能就是好的.但是,如果你在其他地方重新开放你的课程以进行monkeypatch,可能会遇到麻烦,因为自动加载不会发现这一点.


mat*_*sko 1

这也可以通过不使用lib/目录,而是通过在app/helpers目录中存储任何类或帮助程序文件来完成。这样它们将在开发期间重新加载并在生产期间缓存。