Как сохранить настройки в виде хэша во внешнем файле? - PullRequest
25 голосов
/ 11 октября 2010

Можно ли как-то использовать это

settings = { 

   'user1' => { 'path' => '/','days' => '5' },
   'user2' => { 'path' => '/tmp/','days' => '3' }
}

во внешнем файле в качестве настроек?

Как я могу включить это в мой скрипт?

Ответы [ 3 ]

62 голосов
/ 11 октября 2010

Наиболее распространенный способ хранения данных конфигурации в Ruby - это использование YAML:

settings.yml

user1:
  path: /
  days: 5

user2:
  path: /tmp/
  days: 3

Затем загрузите его в свой код следующим образом:

require 'yaml'
settings = YAML::load_file "settings.yml"
puts settings.inspect

Вы можете создать файл YAML, используя to_yaml:

File.open("settings.yml", "w") do |file|
  file.write settings.to_yaml
end

Тем не менее, вы также можете включить прямой код Ruby, используя load:

load "settings.rb"

Однако вы не можете получить доступ к локальным переменным вне файла, поэтому вам придется изменить свой код, чтобы использовать переменную экземпляра или глобальную переменную:

settings.rb

SETTINGS = { 
 'user1' => { 'path' => '/','days' => '5' },
 'user2' => { 'path' => '/tmp/','days' => '3' }
}
@settings = { 'foo' => 1, 'bar' => 2 }

Затем загрузите его так:

load "settings.rb"
puts SETTINGS.inspect
puts @settings.inspect
6 голосов
/ 11 октября 2010

Вы также можете использовать Маршал

settings = {
   'user1' => { 'path' => '/','days' => '5' },
   'user2' => { 'path' => '/tmp/','days' => '3' }
}
data=Marshal.dump(settings)
open('output', 'wb') { |f| f.puts data }
data=File.read("output")
p Marshal.load(data)
2 голосов
/ 02 декабря 2014

Очень просто использовать eval.

config.txt

{ 
   'user1' => { 'path' => '/','days' => '5' },
   'user2' => { 'path' => '/tmp/','days' => '3' }
}

program.rb

configuration = eval(File.read("./config.txt"))
puts configuration['user1']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...