Rails 开发环境如何限制不要自动重载一些目录下面的文件?

linjunhalida · 2014年08月14日 · 最后由 linjunhalida 回复于 2014年08月15日 · 1835 次阅读

现在一个项目,里面有好多的 model class 文件(几百个),这些文件一般不改动的。

然后开发过程每次请求都超级慢,关掉 cache 之后好多了。有什么办法设置一些特定目录不要自动重载?

config.autoload_paths

config.autoload_paths 只能加,不能减。。。

有一个 config.autoload_once_paths 不知道有没有用。。

@linjunhalida 可以使用 autoload_once_paths, 另外 autoload_paths -= %w[] 可以减啊,不过看起来 autoload_once_paths 更符合你要求。 另外仅供参考,下面这种方式会自动加载 app/services/下除了 aaa 目录以外的所有

Dir.glob("#{Rails.root}/app/services/**[^aaa]/*/").each do |dir| 
  config.autoload_paths << dir 
end

@shreadline 不行,设置了 autoload_once_paths,但是还是每次请求都 reload 了。

about spring?

@shreadline 测试了一下,新的项目是支持这个的,可能是老的项目做了一些设置,我去看看哪里有。。

我提个笨办法,直接写个脚本,一个 mv 出去,一个 mv 里来,mv 操作是很快的,也可以试一下 ln -s 不加载的时候删除这个链接,加载的时候建立一下。

狗头军师出主意,不行您就笑笑,呵呵

我也有一个 400+ Model 的 rails 项目,不过没有遇到 @linjunhalida 的问题啊?你检查一下是否引用了 googlde 字体吧?一般应该是这个导致页面加载缓慢,换成 360 的 web 字体就好了。

<link href='http://fonts.googleapis.com/css?family=Russo+One' rel='stylesheet' type='text/css'>
<link href='http://fonts.useso.com/css?family=Russo+One' rel='stylesheet' type='text/css'>

models 是在db/目录下面,然后发现问题是还有一个 db.rb 定义了 module DB 在旧目录的位置中,这样每次 reload 的时候删除掉了这个 module,造成每次都会重新加载而不是缓存起来,把 db.rb 也移动到 autoload_once_paths 里面解决掉了这个问题。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号