2014-11-25 56 views
0

我想運行一個木偶應用並拋出一堆錯誤。運行木偶心理錯誤

hiera -c /etc/puppet/hiera.yaml類

生成以下內容:

require 'psych.so' 
require 'psych/nodes' 
require 'psych/streaming' 
require 'psych/visitors' 
require 'psych/handler' 
require 'psych/tree_builder' 
require 'psych/parser' 
require 'psych/omap' 
require 'psych/set' 
require 'psych/coder' 
require 'psych/core_ext' 
require 'psych/deprecated' 
require 'psych/stream' 
require 'psych/json/tree_builder' 
require 'psych/json/stream' 
require 'psych/handlers/document_stream' 

### 
# = Overview 
# 
# Psych is a YAML parser and emitter. 
# Psych leverages libyaml [Home page: http://pyyaml.org/wiki/LibYAML] 
# or [Git repo: https://github.com/zerotao/libyaml] for its YAML parsing 
# and emitting capabilities. In addition to wrapping libyaml, Psych also 
# knows how to serialize and de-serialize most Ruby objects to and from 
# the YAML format. 
# 
# = I NEED TO PARSE OR EMIT YAML RIGHT NOW! 
# 
# # Parse some YAML 
# Psych.load("--- foo") # => "foo" 
# 
# # Emit some YAML 
# Psych.dump("foo")  # => "--- foo\n...\n" 
# { :a => 'b'}.to_yaml # => "---\n:a: b\n" 
# 
# Got more time on your hands? Keep on reading! 
# 
# == YAML Parsing 
# 
# Psych provides a range of interfaces for parsing a YAML document ranging from 
# low level to high level, depending on your parsing needs. At the lowest 
# level, is an event based parser. Mid level is access to the raw YAML AST, 
# and at the highest level is the ability to unmarshal YAML to ruby objects. 
# 
# === Low level parsing 
# 
# The lowest level parser should be used when the YAML input is already known, 
# and the developer does not want to pay the price of building an AST or 
# automatic detection and conversion to ruby objects. See Psych::Parser for 
# more information on using the event based parser. 
# 
# === Mid level parsing 
# 
# Psych provides access to an AST produced from parsing a YAML document. This 
# tree is built using the Psych::Parser and Psych::TreeBuilder. The AST can 
# be examined and manipulated freely. Please see Psych::parse_stream, 
# Psych::Nodes, and Psych::Nodes::Node for more information on dealing with 
# YAML syntax trees. 
# 
# === High level parsing 
# 
# The high level YAML parser provided by Psych simply takes YAML as input and 
# returns a Ruby data structure. For information on using the high level parser 
# see Psych.load 
# 
# == YAML Emitting 
# 
# Psych provides a range of interfaces ranging from low to high level for 
# producing YAML documents. Very similar to the YAML parsing interfaces, Psych 
# provides at the lowest level, an event based system, mid-level is building 
# a YAML AST, and the highest level is converting a Ruby object straight to 
# a YAML document. 
# 
# === Low level emitting 
# 
# The lowest level emitter is an event based system. Events are sent to a 
# Psych::Emitter object. That object knows how to convert the events to a YAML 
# document. This interface should be used when document format is known in 
# advance or speed is a concern. See Psych::Emitter for more information. 
# 
# === Mid level emitting 
# 
# At the mid level is building an AST. This AST is exactly the same as the AST 
# used when parsing a YAML document. Users can build an AST by hand and the 
# AST knows how to emit itself as a YAML document. See Psych::Nodes, 
# Psych::Nodes::Node, and Psych::TreeBuilder for more information on building 
# a YAML AST. 
# 
# === High level emitting 
# 
# The high level emitter has the easiest interface. Psych simply takes a Ruby 
# data structure and converts it to a YAML document. See Psych.dump for more 
# information on dumping a Ruby data structure. 

module Psych 
    # The version is Psych you're using 
    VERSION   = '2.0.0' 

    # The version of libyaml Psych is using 
    LIBYAML_VERSION = Psych.libyaml_version.join '.' 

    class Exception < RuntimeError 
    end 

    class BadAlias < Exception 
    end 

    ### 
    # Load +yaml+ in to a Ruby data structure. If multiple documents are 
    # provided, the object contained in the first document will be returned. 
    # +filename+ will be used in the exception message if any exception is raised 
    # while parsing. 
    # 
    # Raises a Psych::SyntaxError when a YAML syntax error is detected. 
    # 
    # Example: 
    # 
    # Psych.load("--- a")    # => 'a' 
    # Psych.load("---\n - a\n - b") # => ['a', 'b'] 
    # 
    # begin 
    #  Psych.load("--- `", "file.txt") 
    # rescue Psych::SyntaxError => ex 
    #  ex.file # => 'file.txt' 
    #  ex.message # => "(file.txt): found character that cannot start any token" 
    # end 
    def self.load yaml, filename = nil 
    result = parse(yaml, filename) 
    result ? result.to_ruby : result 
    end 

    ### 
    # Parse a YAML string in +yaml+. Returns the first object of a YAML AST. 
    # +filename+ is used in the exception message if a Psych::SyntaxError is 
    # raised. 
    # 
    # Raises a Psych::SyntaxError when a YAML syntax error is detected. 
    # 
    # Example: 
    # 
    # Psych.parse("---\n - a\n - b") # => #<Psych::Nodes::Sequence:0x00> 
    # 
    # begin 
    #  Psych.parse("--- `", "file.txt") 
    # rescue Psych::SyntaxError => ex 
    #  ex.file # => 'file.txt' 
    #  ex.message # => "(file.txt): found character that cannot start any token" 
    # end 
    # 
    # See Psych::Nodes for more information about YAML AST. 
    def self.parse yaml, filename = nil 
    parse_stream(yaml, filename) do |node| 
     return node 
    end 
    false 
    end 

    ### 
    # Parse a file at +filename+. Returns the YAML AST. 
    # 
    # Raises a Psych::SyntaxError when a YAML syntax error is detected. 
    def self.parse_file filename 
    File.open filename, 'r:bom|utf-8' do |f| 
     parse f, filename 
    end 
    end 

    ### 
    # Returns a default parser 
    def self.parser 
    Psych::Parser.new(TreeBuilder.new) 
    end 

    ### 
    # Parse a YAML string in +yaml+. Returns the full AST for the YAML document. 
    # This method can handle multiple YAML documents contained in +yaml+. 
    # +filename+ is used in the exception message if a Psych::SyntaxError is 
    # raised. 
    # 
    # If a block is given, a Psych::Nodes::Document node will be yielded to the 
    # block as it's being parsed. 
    # 
    # Raises a Psych::SyntaxError when a YAML syntax error is detected. 
    # 
    # Example: 
    # 
    # Psych.parse_stream("---\n - a\n - b") # => #<Psych::Nodes::Stream:0x00> 
    # 
    # Psych.parse_stream("--- a\n--- b") do |node| 
    #  node # => #<Psych::Nodes::Document:0x00> 
    # end 
    # 
    # begin 
    #  Psych.parse_stream("--- `", "file.txt") 
    # rescue Psych::SyntaxError => ex 
    #  ex.file # => 'file.txt' 
    #  ex.message # => "(file.txt): found character that cannot start any token" 
    # end 
    # 
    # See Psych::Nodes for more information about YAML AST. 
    def self.parse_stream yaml, filename = nil, &block 
    if block_given? 
     parser = Psych::Parser.new(Handlers::DocumentStream.new(&block)) 
     parser.parse yaml, filename 
    else 
     parser = self.parser 
     parser.parse yaml, filename 
     parser.handler.root 
    end 
    end 

    ### 
    # call-seq: 
    # Psych.dump(o)    -> string of yaml 
    # Psych.dump(o, options)  -> string of yaml 
    # Psych.dump(o, io)   -> io object passed in 
    # Psych.dump(o, io, options) -> io object passed in 
    # 
    # Dump Ruby object +o+ to a YAML string. Optional +options+ may be passed in 
    # to control the output format. If an IO object is passed in, the YAML will 
    # be dumped to that IO object. 
    # 
    # Example: 
    # 
    # # Dump an array, get back a YAML string 
    # Psych.dump(['a', 'b']) # => "---\n- a\n- b\n" 
    # 
    # # Dump an array to an IO object 
    # Psych.dump(['a', 'b'], StringIO.new) # => #<StringIO:0x000001009d0890> 
    # 
    # # Dump an array with indentation set 
    # Psych.dump(['a', ['b']], :indentation => 3) # => "---\n- a\n- - b\n" 
    # 
    # # Dump an array to an IO with indentation set 
    # Psych.dump(['a', ['b']], StringIO.new, :indentation => 3) 
    #def self.dump o, io = nil, options = {} 
    def self.dump o, io = nil, options = {} 
    if Hash === io 
     options = io 
     io  = nil 
    end 

    visitor = Psych::Visitors::YAMLTree.new options 
    visitor << o 
    visitor.tree.yaml io, options 
    end 

    ### 
    # Dump a list of objects as separate documents to a document stream. 
    # 
    # Example: 
    # 
    # Psych.dump_stream("foo\n ", {}) # => "--- ! \"foo\\n \"\n--- {}\n" 
    def self.dump_stream *objects 
    visitor = Psych::Visitors::YAMLTree.new {} 
    objects.each do |o| 
     visitor << o 
    end 
    visitor.tree.yaml 
    end 

    ### 
    # Dump Ruby object +o+ to a JSON string. 
    def self.to_json o 
    visitor = Psych::Visitors::JSONTree.new 
    visitor << o 
    visitor.tree.yaml 
    end 

    ### 
    # Load multiple documents given in +yaml+. Returns the parsed documents 
    # as a list. If a block is given, each document will be converted to ruby 
    # and passed to the block during parsing 
    # 
    # Example: 
    # 
    # Psych.load_stream("--- foo\n...\n--- bar\n...") # => ['foo', 'bar'] 
    # 
    # list = [] 
    # Psych.load_stream("--- foo\n...\n--- bar\n...") do |ruby| 
    #  list << ruby 
    # end 
    # list # => ['foo', 'bar'] 
    # 
    def self.load_stream yaml, filename = nil 
    if block_given? 
     parse_stream(yaml, filename) do |node| 
     yield node.to_ruby 
     end 
    else 
     parse_stream(yaml, filename).children.map { |child| child.to_ruby } 
    end 
    end 

    ### 
    # Load the document contained in +filename+. Returns the yaml contained in 
    # +filename+ as a ruby object 
    def self.load_file filename 
    File.open(filename, 'r:bom|utf-8') { |f| self.load f, filename } 
    end 

    # :stopdoc: 
    @domain_types = {} 
    def self.add_domain_type domain, type_tag, &block 
    key = ['tag', domain, type_tag].join ':' 
    @domain_types[key] = [key, block] 
    @domain_types["tag:#{type_tag}"] = [key, block] 
    end 

    def self.add_builtin_type type_tag, &block 
    domain = 'yaml.org,2002' 
    key = ['tag', domain, type_tag].join ':' 
    @domain_types[key] = [key, block] 
    end 

    def self.remove_type type_tag 
    @domain_types.delete type_tag 
    end 

    @load_tags = {} 
    @dump_tags = {} 
    def self.add_tag tag, klass 
    @load_tags[tag] = klass 
    @dump_tags[klass] = tag 
    end 

    class << self 
    attr_accessor :load_tags 
    attr_accessor :dump_tags 
    attr_accessor :domain_types 
    end 
    # :startdoc: 
end 

我已經看到了一些參考報價

:文件的

/usr/share/ruby/vendor_ruby/2.0/psych.rb:205:in `parse': (<unknown>): found character that cannot start any token while scanning for the next token at line 238 column 3 (Psych::SyntaxError) 
    from /usr/share/ruby/vendor_ruby/2.0/psych.rb:205:in `parse_stream' 
    from /usr/share/ruby/vendor_ruby/2.0/psych.rb:153:in `parse' 
    from /usr/share/ruby/vendor_ruby/2.0/psych.rb:129:in `load' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend/yaml_backend.rb:18:in `block (2 levels) in lookup' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/filecache.rb:53:in `read_file' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend/yaml_backend.rb:17:in `block in lookup' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend.rb:104:in `block in datasourcefiles' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend.rb:76:in `block in datasources' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend.rb:74:in `map' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend.rb:74:in `datasources' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend.rb:99:in `datasourcefiles' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend/yaml_backend.rb:16:in `lookup' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend.rb:206:in `block in lookup' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend.rb:203:in `each' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera/backend.rb:203:in `lookup' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/lib/hiera.rb:60:in `lookup' 
    from /usr/local/share/ruby/gems/2.0/gems/hiera-1.3.4/bin/hiera:225:in `<top (required)>' 
    from /usr/local/bin/hiera:23:in `load' 
    from /usr/local/bin/hiera:23:in `<main>' 

內容

require 'yaml' 
YAML::ENGINE.yamler = 'syck' 

找不到config/boot.rb來試試這個。

我掏出了系統廣泛的紅寶石和寶石。試圖RVM和我仍然得到類似的錯誤:

我在調試模式下運行hiera:

[[email protected] ~]$ hiera -d -c eye 
Cannot find config file: eye 
[[email protected] ~]$ hiera -d eye 
DEBUG: 2014-11-25 05:47:37 +0700: Hiera YAML backend starting 
DEBUG: 2014-11-25 05:47:37 +0700: Looking up eye in YAML backend 
DEBUG: 2014-11-25 05:47:37 +0700: Looking for data source default 
/home/lame/.rvm/gems/ruby-2.1.5/gems/psych-2.0.6/lib/psych.rb:370:in `parse': (<unknown>): found character that cannot start any token while scanning for the next token at line 238 column 3 (Psych::SyntaxError) 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/psych-2.0.6/lib/psych.rb:370:in `parse_stream' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/psych-2.0.6/lib/psych.rb:318:in `parse' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/psych-2.0.6/lib/psych.rb:245:in `load' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend/yaml_backend.rb:18:in `block (2 levels) in lookup' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/filecache.rb:53:in `read_file' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend/yaml_backend.rb:17:in `block in lookup' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend.rb:104:in `block in datasourcefiles' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend.rb:76:in `block in datasources' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend.rb:74:in `map' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend.rb:74:in `datasources' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend.rb:99:in `datasourcefiles' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend/yaml_backend.rb:16:in `lookup' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend.rb:206:in `block in lookup' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend.rb:203:in `each' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera/backend.rb:203:in `lookup' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/lib/hiera.rb:60:in `lookup' 
     from /home/lame/.rvm/gems/ruby-2.1.5/gems/hiera-1.3.4/bin/hiera:225:in `<top (required)>' 
     from /home/lame/.rvm/gems/ruby-2.1.5/bin/hiera:23:in `load' 
     from /home/lame/.rvm/gems/ruby-2.1.5/bin/hiera:23:in `<main>' 
     from /home/lame/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `eval' 
     from /home/lame/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `<main>' 

你是在暗示我有一個看看hiera文件本身?

+0

您包含的文件內容只是'psych'庫的源文件。在線205上,如錯誤消息中所述,庫調用parser.parse。錯誤來自任何你想分析的文件,其中的內容不包括在你的問題中。 – 2014-11-25 05:38:36

+0

你嘗試用 需要 'YAML' YAML :: ENGINE.yamler = 'psyck' – pramod 2014-11-25 06:07:13

回答

1

您的錯誤消息說,看看你的yaml文件的第238行第3列。檢查你是否有任何非法角色。

+0

我的假設是以下文件: lrwxrwxrwx 1根54根11月24日03:24在/ usr /共享/紅寶石/ vendor_ruby /2.0/psych.rb - > /usr/share/ruby/gems/2.0/gems/psych-2.0.0/lib/psych.rb – user2967267 2014-11-25 05:56:39

+0

這是庫文件,它運行'parse'方法拋出錯誤。實際的語法錯誤出現在'parse'解析的文件中。 – 2014-11-25 05:59:31

+0

正確 - 忽略堆棧跟蹤。 – 2014-11-25 06:17:17