我正在尝试升级具有由另一个人开发的 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)