2010-10-06 56 views
161

Bir YAML dosyasını aşağıdaki içeriklerle nasıl ayrıştırılacağını öğrenmek istiyorum:YAML dosyasını nasıl ayrıştırırım?

--- 
javascripts: 
- fo_global: 
    - lazyload-min 
    - holla-min 

Şu an bunu şu şekilde ayrıştırmaya çalışıyorum:

@custom_asset_packages_yml = (File.exists?("#{RAILS_ROOT}/config/asset_packages.yml") ? YAML.load_file("#{RAILS_ROOT}/config/asset_packages.yml") : nil) 
    if [email protected]_asset_packages_yml.nil? 
     @custom_asset_packages_yml['javascripts'].each{ |js| 
     js['fo_global'].each{ |script| 
     script 
     } 
     } 
    end 

Ama işe yaramıyor bana değerin sıfır olduğu konusunda bir hata verir.

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.each 

Bunu denerseniz, tüm dizeyi (fo_globallazyload-minholla-min) ortaya çıkarır:

if [email protected]_asset_packages_yml.nil? 
      @custom_asset_packages_yml['javascripts'].each{ |js| 
      js['fo_global'] 
      } 
     end 
+1

bunu çalıştırdığınızda komut çıktısını verebilir? dosyalar doğru yerde mi? Rails konsolunu her zaman ateşleyebilir ve yakutun bu yolu görüp göremeyeceğini görebilirsiniz. – Lukas

+0

Evet, dosya var ve doğru yerde. Gönderiyi hatayla güncelledim. – alvincrespo

cevap

380

Belki bir şey eksik, ama neden dosyayı ayrıştırmak deneyin? Neden sadece YAML'yi yüklemiyor ve sonuçta ortaya çıkan nesneyi (neleri) incelemiyoruz? senin örnek YAML some.yml ise

, o zaman bu:

require 'yaml' 
thing = YAML.load_file('some.yml') 
puts thing.inspect 

ben aynı problem vardı ama aynı zamanda YAML sonra dosyanın içeriğini (almak istedim bana

{"javascripts"=>[{"fo_global"=>["lazyload-min", "holla-min"]}]} 
+8

Katılıyorum, bu YAML ile ilgili harika - daha sonra bir şeyler serileştirebiliriz ve sonra bu özelliği kullanamayız. –

+0

Ah, bunu YAML dosyası ile yapabileceğinizden habersizdim. Çok teşekkürler! – alvincrespo

+0

Herhangi bir nedenle yaml gerektirebilir, ama ayrıştırma hatası alıyorum, o zaman Psych hakkında bir şey görüyorum. Sonra Psych.load ("file.yml") yaptığımda, dosyanın gerçek içeriğini değil "file.yml" kısmını çıkarır. – Pred