1

我在文件中有一个开关列表,我需要在内存中维护这些值。我不能使用像 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) 来刷新新实例

我实际上正在寻找的是刷新从中产生实例的父进程,以便在每次创建实例时避免此块。

无论如何我可以在不重新启动项目的情况下实现这一点。

提前致谢。

4

0 回答 0