我的应用程序控制器名为McController,它扩展了ApplicationController,我在McController中设置了一个名为@@ scheduler_map的类变量,如下所示:
class McController < ApplicationController
@@scheduler_map = {}
def action
...
end
private
def get_scheduler(host, port)
scheduler = @@scheduler_map[host+"_"+port]
unless scheduler
scheduler = Scheduler.create(host, port)
@@scheduler_map[host+"_"+port] = scheduler
end
scheduler
end
end
但我发现从第二个请求开始@@ scheduler_map始终是一个空哈希,我在开发环境中运行它,有人知道原因吗?那与运行环境有关吗?
提前谢谢。
答案 0 :(得分:9)
你回答了自己的问题: - )
是的,这是由开发环境(我测试过)引起的,更准确地说是config / environments / development.rb中的配置选项“config.cache_classes = false”
此标志将导致在每次请求时重新加载所有类。 这样做是因为当您对控制器进行少量更改时,您不必重新启动整个服务器。
您可能需要考虑一下,当您稍后在生产中进行大量访问时,您正在尝试的内容可能会导致巨大的内存泄漏。 每次用户访问您的网站时,它都会在该哈希中创建一个新的主菜,并且永远不会被清除。 想象一下,如果10.000用户访问过您的网站会发生什么?或者1.000.000怎么样? 所有这些数据都保存在系统内存中,因此服务器上线的时间越长,就会占用大量空间。
此外,我不确定此解决方案是否适用于生产服务器。 服务器将创建多个威胁,以同时处理大量访问者。 我认为(不确定)每个威胁都有自己的类实例。 这意味着在处理1中可能存在ip xx的调度映射,但在处理2中则不存在。 如果你给我一些关于这个调度程序的更多信息,我可以给出一个不同解决方案的建议。