Rails ENV变量持续多长时间?

时间:2014-04-09 00:51:13

标签: ruby-on-rails ruby-on-rails-4 environment-variables

在config / boot.rb中,如果设置了一些环境变量:

ENV ['some'] = 1

是否会在请求中保留内存(适用于开发和生产环境)?它被删除的唯一时间是应用程序关闭时,是否正确?

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"进程继承它)。