0

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

1 回答 1

0

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

于 2018-12-15T15:35:22.493 回答