Feng Luhan wrote:
> I hava a yaml file as application config file. I use YAML::Store to
> reset yaml key value, but it is not work. please help me!
> 
> y = YAML::Store.new( "#{RAILS_ROOT}/config_app/config.yml", :Indent => 2
> )
> y.transaction do
>   y['value'].key1 = 'aaa'   # undefined method `[]' for
> #<YAML::DomainType>
>   y['value'].key2 = 'bbb'
> end
> 
> File.open('config.yml','a+') do |file|
>   yy = YAML::load(file)
>   puts yy.value['key1']     # key1 = 111
>   yy.value['key1'] = 'aaa'  # config.yml have not changed.
> end

I don't know much about YAML::Store, but if it is a YAML version of 
PStore, then I recommend using my FSDB library instead.

Here's an example:


require 'fsdb' # http://redshift.sourceforge.net/fsdb

db = FSDB::Database.new("~/tmp")

# Tell FSDB to use YAML format when it sees ".yml" and ".yaml" suffixes.
# It is easy to extend the recognition rules to handle other formats.
db.formats = [FSDB::YAML_FORMAT] + db.formats

# Write (atomically) the initial data to the file.
db["config.yml"] = { "key1" => 111, "key2" => 222 }

# Enter a thread-safe and process-safe transaction to
# change the state of the file.
db.edit("config.yml") do |cfg|
   cfg['key1'] = 'aaa'
   cfg['key2'] = 'bbb'
end

# Check that it works.
puts File.read(File.expand_path("~/tmp/config.yml"))

__END__

Output:

---
key1: aaa
key2: bbb


-- 
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407