【问题标题】:Ruby 1.8 vs 2.3 handling YAML config arrays differentlyRuby 1.8 与 2.3 处理 YAML 配置数组的方式不同
【发布时间】:2018-12-15 14:59:54
【问题描述】:

我正在尝试升级具有其他人开发的 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)

【问题讨论】:

  • 使用p时的数组结果相同。

标签: yaml ruby-2.3


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 2016-01-23
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多