Is there an Application state in Rails like ASP

Unless I'm mistaken, anything you create in environment.rb persists
until server restart because environment.rb is a load-once file.
There are several plugins for storing settings (n/v pairs), but if
you want to persist page state like WinForms on Asp.Net, this isn't
the method for you.

If you're casting about for a way to store options and don't want to
go the plugin route, stick this in RAILS_ROOT/lib and they you can
write code like:

Options[:email_recipients] = ['me@mydomain.com', 'you@yourdomain.com']

# options.rb

Hi~

Unless I'm mistaken, anything you create in environment.rb persists
until server restart because environment.rb is a load-once file.
There are several plugins for storing settings (n/v pairs), but if
you want to persist page state like WinForms on Asp.Net, this isn't
the method for you.

If you're casting about for a way to store options and don't want to
go the plugin route, stick this in RAILS_ROOT/lib and they you can
write code like:

Options[:email_recipients] = ['me@mydomain.com', 'you@yourdomain.com']

# options.rb
#
# Provide a container for global option storage
# Both getter/setter and [] access methods are
# provided.

class Options
   @@option_hash = {}

   def self.set(option_name, value)
     option_name = option_name.to_s
     @@option_hash[option_name] = value
   end

   def self.get(option_name)
     option_name = option_name.to_s
     @@option_hash[option_name]
   end

   def self.[]=(option_name, value)
     option_name = option_name.to_s
     self.set(option_name, value)
   end

   def self.[](option_name)
     option_name = option_name.to_s
     self.get(option_name)
   end

   def self.has_key?(key)
     key = key.to_s
     @@option_hash.has_key?(key)
   end

   def self.key?(key)
     self.has_key?(key)
   end
end

  Keep in mind this will not work when you run more then one rails backend. As each mongrel or fcgi will have a separate copy of this class and you are not always garaunteed that your users will always hit the same backend. So you will have to use the session, memcached or a DRb server for global state because it needs to be an external process that all rails backends can talk to to keep the data consistent. Or you also use the database to store state too.

Cheers-

-- Ezra Zygmuntowicz-- Lead Rails Evangelist
-- ez@engineyard.com
-- Engine Yard, Serious Rails Hosting
-- (866) 518-YARD (9273)

Good point. This was lifted from some of my code that uses it on app
startup to store app-wide setup info. Of course when each backend is
fired up it is stuffed with the same information so 'sall good.
Application state can better be preserved using memcached or dRb or
even AR-sessions. Just don't save too much state :slight_smile: