2017-01-03 1 views
0

J'ai un fichier yml qui contient quelques informations sur les paramètres de bases de données. J'ai besoin de créer un fichier qui a pris le contenu de la clé et créer un fichier.Écrire le contenu dans le fichier yml de hachage donné dans Ruby

comme, mon fichier YML:

db_info.yml

databases: 
    database1: # This would be first database 
    development: 
     adapter: mysql2 
     host: localhost 
     database: dev1 
     password: root 
     username: root 
     encoding: utf8 
    test: 
     adapter: mysql2 
     host: localhost 
     database: dev1_test 
     username: root 
     password: root 
     host: localhost 
    database2: # This would be second database 
    development: 
     adapter: mysql2 
     host: localhost 
     encoding: utf8 
     database: dev 
     password: root 
     username: root 
    test: 
     adapter: mysql2 
     host: localhost 
     database: dev_test 
     username: root 
     password: root 
     host: localhost 

Quand je charge ce fichier yml et essayer d'écrire des informations de fichiers individuels dans le nouveau fichier yml qui a sauvé de manière erronée.

Je veux écrire le contenu dans le nouveau fichier comme

new_file.yml

config_file = Rails.root.join('config', 'multiple_database.yml') 
file = YAML.load(ERB.new(File.new(config_file).read).result) 

file['databases']['database1'] donc me retourner Hash

{"development"=>{"adapter"=>"mysql2", "host"=>"localhost", "database"=>"dev1", "password"=>"root", "username"=>"root", "encoding"=>"utf8"}, "test"=>{"adapter"=>"mysql2", "host"=>"localhost", "database"=>"dev1_test", "password"=>"root", "username"=>"root", "encoding"=>"utf8"}} 

Je veux écrire ce contenu dans la nouvelle yml fichier comme

development: 
    adapter: mysql2 
    host: localhost 
    database: dev1 
    password: root 
    username: root 
test: 
    adapter: mysql2 
    host: localhost 
    database: dev1_test 
    username: root 
    password: root 
    host: localhost 

J'ai essayé comme ceci:

array_of_hashes = [{:"client-1.domaine.net"=>"www.client-1.domaine.net/index.html/xxxxxx", :fef => 12}] 
File.open("lib/yamlfile.yml","w") do |file| 
    file.write array_of_hashes.to_yaml 
end 

Alors sortie comme ça

--- 
- :client-1.domaine.net: www.client-1.domaine.net/index.html/xxxxxx 
    :fef: 12 
+0

Quelle est la solution que vous avez essayée de faire avec la question? –

+0

J'ai essayé quelque chose comme ceci array_of_hashes = [{: "client-1.domaine.net" => "www.client-1.domaine.net/index.html/xxxxxx",: fef => 12}] Fichier.open ("lib/yamlfile.yml", "w") do | fichier | file.write array_of_hashes.to_yaml fin Mais cela ne semble pas 'base.yml' comme' rails'. –

+0

En fait, j'ai essayé avec un exemple simple –

Répondre

0

essayez d'appliquer la méthode 'to_yaml' au lieu de hachage tableau de hachages. Vous l'aurez droit

Ceci est votre code

array_of_hashes = [{:"client-1.domaine.net"=>"www.client-1.domaine.net/index.html/xxxxxx", :fef => 12}] 
File.open("lib/yamlfile.yml","w") do |file| 
    file.write array_of_hashes.to_yaml 
end 

Pour ce faire,

array_of_hashes = [{:"client-1.domaine.net"=>"www.client-1.domaine.net/index.html/xxxxxx", :fef => 12}] 
File.open("lib/yamlfile.yml","w") do |file| 
    file.write array_of_hashes[0].to_yaml 
           ^^^ 
end 

et vérifier. J'espère que ça aide