我正在尝试升级具有其他人开发的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)
答案 0 :(得分:0)
好吧,看来我要做的就是将YAML键括在引号中,现在哈希对象在键中包含下划线,其余脚本起作用了!