在config / boot.rb中,如果设置了一些环境变量:
ENV ['some'] = 1
是否会在请求中保留内存(适用于开发和生产环境)?它被删除的唯一时间是应用程序关闭时,是否正确?
答案 0 :(得分:2)
它将在整个过程的生命周期内留在记忆中。
是否会在请求中留在内存中
它会,但要注意以下问题:如果您使用的是多进程服务器(例如独角兽,彩虹,乘客,群集模式中的puma等)并且在应用程序启动后修改环境变量,则更改不会在不同的应用程序实例之间共享。
运行(并使用)此示例以获得更好的想法:(fork
是多进程服务器为产生多个实例所做的工作)。
ENV["some"] = "1"
puts "Value on master process: #{ENV['some']}"
fork do
puts "Initial value on process 1: #{ENV['some']}"
sleep 1
ENV["some"] = "2"
puts "Final value on process 1: #{ENV['some']}"
end
fork do
puts "Initial value on process 2: #{ENV['some']}"
# Wait for the process 1 to finish
sleep 2
puts "Final value on process 2: #{ENV['some']}"
end
Process.waitall
输出:
Value on master process: 1
Initial value on process 1: 1
Initial value on process 2: 1
Final value on process 1: 2
Final value on process 2: 1
ENV['some']
on"进程1"从"进程2"中看不到,即使它们最初是相同的(并且都从" master"进程继承它)。