Внешняя конфигурация для автономного скрипта Ruby - PullRequest
0 голосов
/ 25 октября 2019

У меня есть автономный скрипт ruby, который предназначен для запуска из командной строки.

В настоящее время у меня есть раздел для определения таких вещей, как пути к файлам и тому подобное.

    key_path = "C:\\OpenSSL-Win64\\keys\\"
    consumer_file = "henrb028.consumer"
    key_file = "henrb028.key"

IЯ хотел бы вытащить все это из файла .rb и в какой-нибудь внешний файл конфигурации. В идеале это было бы как можно легче. Например, просто скопируйте и вставьте это в другой файл ruby, а затем вставьте его во время выполнения.

Я пробовал оба require и include и получал различные ошибки. Не прибегая к чему-то вроде YAML, какой простой и надежный способ сделать это?

1 Ответ

2 голосов
/ 28 октября 2019

Существует несколько стандартных способов реализовать то, что вы описываете.

Чтение из переменных среды

В каждом из этих сред хранится определенный параметр. Затем пользователи могут контролировать, хотят ли они изменить некоторые или все параметры.

  • Плюсы : Стандартный и удобный способ как для разработчиков, так и для пользователей, при условии, что параметры редко изменяются,Параметры по умолчанию могут быть легко переданы в той же среде (например, в той же учетной записи или даже для всей платформы), а также в других программах.
  • Минусы : немного затенены. Например, если работа пользователя с инструментом зарегистрирована в файле, другие люди (или даже сам пользователь позднее) не могут определить точный набор используемых параметров из файла журнала. Или, если пользователь хочет часто менять параметр, это неудобно.

Пример :

 key_file = ENV['KEY_FILE'] || "henrb028.key"

Чтение из файла конфигурации

Тогда любой или оба пользователя и системный администратор могут контролировать и изменять его при необходимости. Как определить имя файла конфигурации файла варьируется.

  • Плюсы : Подходит для хранения большого набора параметров.
  • Минусы Несколько затуманено. Например, если работа пользователя с инструментом зарегистрирована в файле, другие люди (или даже сам пользователь позже) не могут сказать, каким был точный набор используемых параметров. Если пользователь хочет часто менять параметр, это очень неудобно.

A (сырой!) Пример :

Предположим, что /etc/OUR_CONFIG.txt выглядит следующим образом,

 CONSUMER_FILE: henrb028.consumer
 KEY_FILE: henrb028.key

Затем прочитайте их как,

 opts = { 'KEY_FILE' => 'default.key' }
 IO.readlines("/etc/OUR_CONFIG.txt").each do |ec|
   a = ec.strip.split(/\s*:\s*/)
   opts[a[0]] = a[1]
 end
 p opts

Укажите с параметрами командной строки

Если некоторые (или все) параметры не указаны при запускевремя должно вернуться к значению по умолчанию . OptionParser (как предложил @tadaman в своем комментарии) - это мощная и универсальная библиотека для обработки параметров командной строки.

  • Pros : Standard andудобный способ для пользователей, особенно для быстрой смены во время выполнения. Если вы видите файл журнала, вы знаете, что именно сделал пользователь.
  • Минусы : Параметры по умолчанию не могут совместно использоваться другими инструментами. Чтобы обойти проблему, есть несколько способов сделать резервную процедуру:
    1. Просто жестко закодируйте значение по умолчанию в основном коде.
    2. Сохраните значение по умолчанию в переменной среды.
    3. Сохраните значение по умолчанию в файле конфигурации. Разработчик должен решить, как определить имя файла конфигурации (жесткое кодирование, переменная окружения и т. Д.).

Грубый пример (безиспользуя OptionParser):

opts = { 'key_file' => 'default.key' }
%w(consumer_file key_file).each do |ec|
  cands = ARGV.grep(/^--#{Regexp.quote ec}=.+/)
  opts[ec] = cands[0].split('=')[1] unless cands.empty?
end
p opts

Я думаю, что это наиболее типичные способы, хотя есть и другие способы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...