# Best place for storing configuration information?

**URL:** <https://www.ruby-forum.com/t/best-place-for-storing-configuration-information/94533>\
**Category:** Rails\
**Created:** [May 5, 2006, 11:32pm UTC](https://www.ruby-forum.com/t/best-place-for-storing-configuration-information/94533 "2006-05-05T23:32:06Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![seanhussey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a88e57/32.png) [@seanhussey](https://www.ruby-forum.com/u/seanhussey)\
**Post date:** [May 5, 2006, 11:32pm UTC](https://www.ruby-forum.com/t/best-place-for-storing-configuration-information/94533/1 "2006-05-05T23:32:06Z")

</div>

Hi all,

Where do you store your non-Rails-specific configuration info? For  
instance, I want to be able to login to LDAP as a particular admin  
user. I don’t want the u/p combo in any of the models…does it go in  
environment.rb? database.yml? Set a constant in a lib file?

When you’ve got it in a good location, how do you access it?

Thanks!

Sean

---

<div class="post-metadata">

**Author:** ![seanhussey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a88e57/32.png) [@seanhussey](https://www.ruby-forum.com/u/seanhussey)\
**Post date:** [May 5, 2006, 11:44pm UTC](https://www.ruby-forum.com/t/best-place-for-storing-configuration-information/94533/2 "2006-05-05T23:44:24Z")

</div>

> Where do you store your non-Rails-specific configuration info? For  
> instance, I want to be able to login to LDAP as a particular admin  
> user. I don’t want the u/p combo in any of the models…does it go in  
> environment.rb? database.yml? Set a constant in a lib file?
> 
> When you’ve got it in a good location, how do you access it?

This is what I’ve done…

% cat config/site.yml  
defaults: &defaults  
memcache\_servers : [‘127.0.0.1:11211’, ‘127.0.0.1:11212’]  
use\_static\_banners : true

development:  
\<\<: \*defaults  
use\_static\_banners : true

test:  
use\_static\_banners : false  
\<\<: \*defaults

production:  
use\_static\_banners : false  
\<\<: \*defaults

Then, in environment.rb do:

site\_yaml = YAML::load\_file("#{RAILS\_ROOT}/config/site.yml")  
…  
… = site\_yaml[RAILS\_ENV][‘use\_static\_banners’]  
… = site\_yaml[RAILS\_ENV][‘memcache\_servers’]  
…

---

<div class="post-metadata">

**Author:** ![seanhussey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a88e57/32.png) [@seanhussey](https://www.ruby-forum.com/u/seanhussey)\
**Post date:** [May 5, 2006, 11:52pm UTC](https://www.ruby-forum.com/t/best-place-for-storing-configuration-information/94533/3 "2006-05-05T23:52:23Z")

</div>

Sean H. wrote:

> Hi all,
> 
> Where do you store your non-Rails-specific configuration info? For  
> instance, I want to be able to login to LDAP as a particular admin  
> user. I don’t want the u/p combo in any of the models…does it go in  
> environment.rb? database.yml? Set a constant in a lib file?
> 
> When you’ve got it in a good location, how do you access it?
> 
> Thanks!
> 
> Sean

I used the Settings plugin  
[http://wiki.rubyonrails.com/rails/pages/SettingsPlugin](http://wiki.rubyonrails.com/rails/pages/SettingsPlugin)

works very well for tracking global variables, and you can easily set  
different values for different environments, since they are in different  
databases.

---

<div class="post-metadata">

**Author:** ![seanhussey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a88e57/32.png) [@seanhussey](https://www.ruby-forum.com/u/seanhussey)\
**Post date:** [May 6, 2006, 5:49pm UTC](https://www.ruby-forum.com/t/best-place-for-storing-configuration-information/94533/4 "2006-05-06T17:49:19Z")

</div>

Sean,

I added this code at the bottom of my environment.rb file:

class FooConfig  
@@property = {  
:ldap\_authenticator =\> {  
:port =\> 389,  
:host =\> ‘yahoo.google.be’,  
:sac\_dn =\> ‘???’,  
:sac\_passw =\> ‘???’,  
:base\_dn =\> ‘???’  
}  
}  
cattr\_accessor :property  
def self.method\_missing(method, \*arguments)  
FooConfig.property[method.to\_sym]  
end  
end

To read the values, you’d just write

```
     port = FooConfig.ldap_authenticator[:port]
     host = FooConfig.ldap_authenticator[:host]

```

though I couldn’t resist Rubyfying it a little further:

#add this in the heavy LDAP settings’ user code:

```
 # implements: host(), port(), sac_dn(), sac_passw() and base_dn()
 def self.method_missing(method, *arguments)
     FooConfig.ldap_authenticator[method.to_sym]
 end

```

, so you can just type  
port = port()  
host = host()

Alain
