0

我正在努力用 中的值替换环境变量Ruby,并试图找出最好的方法来做到这一点。我有一个JSON正在解析的提要,看起来像这样:%MY_SERVER/json/data/mydata?someparameter另一个看起来像%MY_OTHER_SERVER/json/data/mydata?somethingdifferent=thisorthat

每个服务器都有不同URL的需要输入。我环顾四周,看到谈论使用replace或寻找特定模式的事情,但我认为这不是最有效的方法。

谁能指出我正确的方向,或者就完成任务的最佳方式提供一些建议?

4

2 回答 2

1

我认为您正在寻找一种有效的方法

myString = "%MY_SERVER/json/data/mydata?someparameter"
myString.gsub!("%MY_SERVER",  ENV['MY_SERVER'])

我认为这是最好的方法。我认为使用 gsub 比使用更快

myString["%MY_SERVER"] = ENV['MY_SERVER']

尽管

myString.replace

将替换整个字符串,您不想使用它。

于 2012-10-24T15:28:58.170 回答
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. 如果占位符的值缺失,则不会被替换。

于 2012-10-24T15:37:42.783 回答