YAMLにrubyのコードを書く方法

1時間でツイッターサービスを作ろう! | KRAY Inc 試してみました。


github公開ソースを見てみると

twitter_auth.yaml
  oauth_consumer_key: <%= ENV['OAUTH_CONSUMER_KEY'] %>
  oauth_consumer_secret: <%= ENV['OAUTH_CONSUMER_SECRET'] %>

となっていました。


おお、これは使えそうだなと思って、
同じようにして、config/initializers 下に gitignore 対象の環境変数読み込みファイル
作ってやってみましたが、うまくいきません。

#config/initializers/env.rb 
ENV['OAUTH_CONSUMER_KEY'] = "hogehoge"
ENV['OAUTH_CONSUMER_SECRET'] = "fugafua"

原因

どうも、yamlの呼出し方に問題があるようで
ソースコードと認識してくれていません。


あれ?fixtureとかdatabase.yamlって使えたよなと思って
railsのソースを見てみると

#rails-2.3.9/lib/initializer.rb
    def database_configuration
      require 'erb'
      YAML::load(ERB.new(IO.read(database_configuration_file)).result)
    end

という書き方で、ERBをかましていました。
なるほどね。

なので

同様の書き方にするとできました。
秘密にしておきたい設定などをgithubなどで公開する方法としていいかもしれません。

# config/environment.rb
module TwitterAuth
  def self.config(environment=RAILS_ENV)
    @config ||= {}
    @config[environment] ||= YAML.load(ERB.new(File.read(RAILS_ROOT + '/config/twitter_auth.yml')).result)[environment]
    #@config[environment] ||= YAML.load(File.open(RAILS_ROOT + '/config/twitter_auth.yml').read)[environment]
  end
end