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