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 に答える