Ruby 1.8 и 2.3 по-разному обрабатывают массивы конфигурации YAML

Я пытаюсь обновить сервер, на котором есть сценарии 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 ответ

Что ж, кажется, все, что мне нужно было сделать, это заключить ключи YAML в кавычки, и теперь хеш-объект включает в себя подчеркивание в ключах, а остальная часть сценария работает!

Другие вопросы по тегам