如何在docker run的环境变量中设置值,使Ruby读取到nil?
如何让Ruby从Docker环境变量中获取nil值
首先要明确:环境变量本质都是字符串类型,没办法直接传递Ruby的nil值,必须通过脚本逻辑转换实现。以下是两种可行方案:
方案1:不定义目标环境变量
如果在环境变量文件中不添加对应变量,Ruby读取时会直接返回nil。
比如你的env文件里只保留其他变量,不写TEST_NIL:
# environment variable file TEST_1=NULL TEST_2=
Ruby脚本中读取:
print ENV['TEST_NIL'] # nil
注意:使用docker run --env-file时,未在文件中定义的变量不会被传入容器,所以Ruby的ENV哈希中不会有这个键,读取时自然返回nil。
方案2:约定特殊值并在脚本中转换
如果必须在env文件中声明变量,可以约定一个特殊标记(比如nil、NULL或空值),在Ruby脚本中判断后转为nil。
示例1:用空值转换
env文件设置:
# environment variable file TEST_NIL=
Ruby脚本处理:
test_nil = ENV['TEST_NIL'].empty? ? nil : ENV['TEST_NIL'] print test_nil # nil
示例2:用"nil"字符串转换
env文件设置:
# environment variable file TEST_NIL=nil
Ruby脚本处理:
test_nil = ENV['TEST_NIL'] == 'nil' ? nil : ENV['TEST_NIL'] print test_nil # nil
总结
环境变量本身无法传递Ruby的nil,只能通过「不传入变量」或「约定特殊值后脚本转换」两种方式实现需求。
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

