我正在使用Ruby
中的值替换环境变量,我正在尝试找出执行此操作的最佳方法。我有一个我正在解析的JSON
Feed,它看起来像这样:%MY_SERVER/json/data/mydata?someparameter
,另一个看起来像%MY_OTHER_SERVER/json/data/mydata?somethingdifferent=thisorthat
每个服务器都有不同的URL
需要输入。我环顾四周,看到有关使用replace
或寻找特定模式的事情,但我不认为这是最有效的方式。
有人能指出我正确的方向,或就完成任务的最佳方式提供一些建议吗?
答案 0 :(得分:1)
我认为您正在寻找一种有效的方法
myString = "%MY_SERVER/json/data/mydata?someparameter"
myString.gsub!("%MY_SERVER", ENV['MY_SERVER'])
我认为这是最好的方法。 我认为使用gsub比使用
更快myString["%MY_SERVER"] = ENV['MY_SERVER']
,而
myString.replace
将替换整个字符串,您不想使用它。
答案 1 :(得分:1)
以下是您寻求的动态方法:
urls = [
'%MY_SERVER/json/data/mydata?someparameter',
'%MY_OTHER_SERVER/json/data/mydata?somethingdifferent=thisorthat'
]
name_regex = /(%\w+)/
ENV['%MY_SERVER'] = 'http://google.com'
replaced = urls.map do |s|
s.gsub name_regex do |env_name|
if ENV[env_name]
ENV[env_name] # replace
else
env_name # leave it untouched
end
# or, the same thing, but shorter
# ENV[env_name] || env_name
end
end
puts replaced
# >> http://google.com/json/data/mydata?someparameter
# >> %MY_OTHER_SERVER/json/data/mydata?somethingdifferent=thisorthat
您只需要扫描输入字符串并找到所有看起来像占位符的内容。幸运的是,你的字符串清晰地格式化了它们。然后,您只需在ENV
中提供值。如果缺少占位符的值,则不会替换它。