我在文件中有一个开关列表,我需要在内存中维护这些值。我不能使用像 memcache、redis 这样的外部缓存存储。我也没有使用 ruby 企业版。
这就是我现在的做法
#load the cache when the project is starting
MYCACHE = ActiveSupport::Cache::MemoryStore.new
MYCACHE.write('myswitch', File.read('/tmp/switch'))
#run this when a passenger instance is created, by declaring in environment.rb
begin
PhusionPassenger.on_event(:starting_worker_process) do |forked|
if forked
MYCACHE.write('myswitch', File.read('/tmp/switches.json'))
end
end
rescue
end
因此,每当我更改文件中的开关时,我都会
sudo passenger-status --verbose
通过点击它们的端口来刷新当前实例,并且通过将文件重新加载到内存来调用 on_event(:starting_worker_process) 来刷新新实例
我实际上正在寻找的是刷新从中产生实例的父进程,以便在每次创建实例时避免此块。
无论如何我可以在不重新启动项目的情况下实现这一点。
提前致谢。