On Dec 30, 2007, at 3:34 PM, Tim Perrett wrote:

> Hey Chaps,
>
> Forgive me for not fully understanding the inner workings of merb, but
> I would like to read in a YAML configuration file once when the
> application is booted rather than reading it every time it is used (as
> presumably the overhead in doing that is significant?) - I had
> presumed this is how both Merb and rails do it for there database.yml
> config files (hence its a requirement to restart the process if you
> change the DB config) but after looking at the rails trunk there seems
> to be nothing obvious going on that would cache the returned
> configuration.
>
> Are there hooks available so that gem plugins for merb can run code
> when the application is at different parts of booting? If so, how on
> earth would I then store said configuration?
>
> Many thanks for any pointers
>
> Tim


Hey Tim-

        There are a few ways of doing this. The best way it to use the  
Merb::Plugins.config hash. If you generate a fresh plugin:

merb -P foobar

        Then look in the plugin at the lib/foobar.rb file you will see this:

# make sure we're running inside Merb
if defined?(Merb::Plugins)

   # Merb gives you a Merb::Plugins.config hash...feel free to put  
your stuff in your piece of it
   Merb::Plugins.config[:foobar] = {
     :chickens => false
   }

   Merb::Plugins.add_rakefiles "foobar/merbtasks"
end


So your best bet is to load the yaml file here and store it away in  
the Merb::Plugins.config hash.. Something like this:


   # Merb gives you a Merb::Plugins.config hash...feel free to put  
your stuff in your piece of it
   Merb::Plugins.config[:foobar] = Erubis.load_yaml_file(MERB_ROOT /  
'config' / 'foobar.yml' )


Then you can put your foobar.yml  file inside of MERB_ROOT/config/   
And now in your app when you want to refer to the hash of stuff loaded  
from the yaml file you woudl access it like this:

  Merb::Plugins.config[:foobar][:somekey]


Doing it will Erubis.load_yaml_file  will load the yaml file and  
interpolate any erb tags inside of it before yaml loading it.

Make sense?

Cheers-

- Ezra Zygmuntowicz
-- Founder & Software Architect
-- [EMAIL PROTECTED]
-- EngineYard.com

_______________________________________________
Merb-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/merb-devel

Reply via email to