17

私は次のコードを持っています/config/initializers/chargify.rb

Chargify.configure do |c|
  c.subdomain = 'example'
  c.api_key   = '123xyz'
end

しかし、開発と本番の設定が異なります。

では、環境に基づいて異なる変数値のセットを取得するにはどうすればよいでしょうか?

4

4 に答える 4

29

このための構成ファイルを作成します ( config/chargify.yml):

development:
  subdomain: example
  api_key: 123abc
production:
  subdomain: production_domain
  api_key: 890xyz

次に、イニシャライザを次のように変更します。

chargify_config_file = File.join(Rails.root,'config','chargify.yml')
raise "#{chargify_config_file} is missing!" unless File.exists? chargify_config_file
chargify_config = YAML.load_file(chargify_config_file)[Rails.env].symbolize_keys

Chargify.configure do |c|
  c.subdomain = chargify_config[:subdomain]
  c.api_key   = chargify_config[:api_key]
end
于 2010-05-12T13:17:22.907 に答える
5

どうですか:

Chargify.configure do |c|
  if Rails.env.production?
    # production settings
    c.api_key   = '123xyz'
  else
    # dev. and test settings
    c.api_key   = '123xyz'
  end
end

さらに良いことに、caseブロックを使用して重複を減らすことができます。

Chargify.configure do |c|
  c.subdomain = 'example'
  c.api_key   = case
    when Rails.env.production?
      '123xyz'
    when Rails.env.staging?
      'abc123'
    else
      'xyz123'
    end
end
于 2011-01-12T19:09:27.063 に答える
4

環境ごとに異なる設定が必要な場合は、config/environments/development.rb.

それらを初期化子に入れることを絶対に主張する場合 (ただし、そうしないでください。それが環境ファイルの目的です)、caseステートメントを使用しRails.envて、現在の環境の名前を文字列として返す の値を調べることができます。

于 2010-05-12T13:14:47.903 に答える