Ruby 1.8 vs 2.3以不同方式处理YAML配置数组

时间:2018-12-15 14:59:55

标签: yaml ruby-2.3

我正在尝试升级具有其他人开发的ruby脚本的服务器。我是一个perl / php开发人员,对ruby的了解不多,只是试图使使用Ruby 1.8开发的脚本能够正常工作,并且这些脚本在处理较新版本中的数组时表现出不同的行为。该脚本未将迭代文件夹与具有文件夹名称的配置文件数组匹配,并且我相信我已将其归结为将YAML配置文件转换为数组的方式。我整理了这个简单的脚本:

require 'rubygems'
require 'yaml'
config_filename = File.expand_path(File.dirname(__FILE__) + "/testruby.yml")
@config = YAML.load(File.open(config_filename))
puts @config

YAML testruby.yml配置文件如下所示:

1_01:
  name: Monday Show
  suffix: showM
  program_id: 123
  segment: 1
  dated: false
1_02:
  name: Monday Show
  suffix: showM
  program_id: 123
  segment: 2
  dated: false
1_03:
  name: Tuesday Show
  suffix: showT
  program_id: 124
  segment: 1
  dated: true

当我在使用Ruby 1.8的原始服务器上运行此命令时,结果是:

1_03program_id124nameTuesday Showsegment1suffixshowTdatedtrue1_02program_id123nameMonday Showsegment2suffixshowMdatedfalse1_01program_id123nameMonday Showsegment1suffixshowMdatedfalse

但是当使用Ruby 2.3在新服务器上运行时,我得到一个数组:

{101=>{"name"=>"Monday Show", "suffix"=>"showM", "program_id"=>123, "segment"=>1, "dated"=>false}, 102=>{"name"=>"Monday Show", "suffix"=>"showM", "program_id"=>123, "segment"=>2, "dated"=>false}, 103=>{"name"=>"Tuesday Show", "suffix"=>"showT", "program_id"=>124, "segment"=>1, "dated"=>true}}

它甚至从配置文件中的文件夹名称键中删除下划线。因此,在脚本的后面,对@config[1_01]的调用当然不匹配。有没有办法像1.9版本那样构建数组,以便脚本的其余部分按设计工作?

还有一点要注意,不确定是否与问题有关。 require 'yaml'行在脚本中不存在,我在运行时收到此错误后添加:

testruby.rb:4:in `<main>': uninitialized constant YAML (NameError)

1 个答案:

答案 0 :(得分:0)

好吧,看来我要做的就是将YAML键括在引号中,现在哈希对象在键中包含下划线,其余脚本起作用了!