Railsで定数ってどこに書いたらいいの?
っていう質問がありました。以下は Rails 2.3.5 対応コードです。
config/initializers/00_load_config.rb
AppConfig = YAML.load_file("#{RAILS_ROOT}/config/settings.yml")[RAILS_ENV].symbolize_keys
としておいて、
config/settings.yml
development: email: "development@example.com" test: email: "test@example.com" production: email: "production@example.com"
などとしておけば、
モデルやコントローラーやビューなどで、
AppConfig[:email]
でアクセス出来ます。
YAMLを使った方が、Rubyコードで直接書くより、環境毎に切り替えられて便利ですね。
config/initializers/ 以下におくより、config/preinitializer.rb に書いた方が良いのでは?という意見もあると思います。それもできるのですが、Railsの実行順の関係でちょっと冗長になります。
config/preinitializer.rb
require 'yaml' AppConfig = YAML.load_file("#{RAILS_ROOT}/config/settings.yml")[ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"].inject({}) do |options, (key, value)| options[(key.to_sym rescue key) || key] = value options end
yamlがrequireされていない、RAILS_ENVが設定されていない、ハッシュに symbolize_keys メソッドが追加されていない、という点を考慮しないといけません。
また、script/server -e production ではなく、RAILS_ENV=production script/server というふうに起動する必要があります。めんどくさいですね。
というわけで、config/initializers/ 以下で1番目に実行されるようにしておくのをオススメします。
※追記
configatron って gem が人気あるので、そっちの方がいいかも!ググったら日本語の記事もいっぱいあるので、ここでは解説しないよ。
それでは、楽しいRails開発を!
※ twitter で無償 Rails サポートボランティアをやっています。"Rails" という単語で監視していますので、つぶやくと、解決方法を知っている場合は reply 致します。24時間監視はできませんので、なんらかの返事が欲しい場合は、直接 @babie までメッセージを下さい。また、動作確認・保証は行いませんのでご了承ください。