2012-04-10 7 views
1

Ich erstelle ein thor-Skript, das das aktuelle Projekt, das ich bin, basierend auf einer Yml-Datei zeigt, die Ruby-Strukturen speichert. Ich erhalte einen Fehler, als ich versuchte, diese YML-Datei zu laden.Thor YAML.load_file ungültige Unterklasse (TypeError)

from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:135:in `node_import' 
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:135:in `load' 
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:135:in `load' 
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:146:in `block in load_file' 
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:145:in `open' 
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:145:in `load_file' 
from ./project:84:in `current' 
from /Users/cpara/.rvm/gems/[email protected]/gems/thor-0.14.6/lib/thor/task.rb:22:in `run' 
from /Users/cpara/.rvm/gems/[email protected]/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task' 
from /Users/cpara/.rvm/gems/[email protected]/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch' 
from /Users/cpara/.rvm/gems/[email protected]/gems/thor-0.14.6/lib/thor/base.rb:389:in `start' 
from ./project:213:in `<main>' 

Hier ist das Stück des Skript auszuführen Ich versuche:

#!/usr/bin/env ruby 
require 'yaml' 
class Project < Thor 
    include Thor::Actions 

    # Task: return current project 
    desc 'current', 'Shows current project.' 
    def current 
    projects = YAML.load_file "#{ENV['HOME']}/.hana/data/projects.yml" #error 
    abort "There are no projects. Try creating one first." if not @projects.is_a? Array 
    projects.each do |project| 
     if project.current == true 
     say_status :current, "Current project: #{project.name} // #{project.type} // #{project.version}", :green 
     return project 
     end 
    end 
    say_status :error, "There is no current project.", :red 
    end 
end 

I triple den Weg in irb geprüft habe und es existiert. Ich dachte, es wäre die Art und Weise, wie mein YAML meine Ruby-Struktur speichert, aber selbst die Konsole, bekomme ich den Fehler. Hier ist meine YAML-Datei

--- 
- !ruby/struct:Proj 
    name: test 
    type: testing 
    version: 4.0.2 
    deploy_dir: deploy 
    source_dir: source 
    current: true 

Irgendwelche Ideen? Ich laufe Ruby 1.9.2p318.

Antwort

2

YAML versucht, eine Struct instanziieren namens Proj aus der Datei, wie durch die Linie:

!ruby/struct:Proj 

Sie sollten die Datei benötigen, wo Sie Proj definiert haved vor dem yaml Laden. Oder nur zu testen, ob es funktioniert, in Ihrem Code, nach dem require 'yaml' Linie definieren Proj:

Proj = Struct.new(:name, :type, :version, :deploy_dir, :source_dir, :current) 
+0

Sie Sir, sind genial. Vielen Dank. – cp3

Verwandte Themen