如何将设置保存为外部文件中的哈希?

时间:2010-10-11 03:39:39

标签: ruby

我可以以某种方式使用此

settings = { 

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

在外部文件中作为设置?

如何将其包含在我的脚本中?

3 个答案:

答案 0 :(得分:62)

在Ruby中存储配置数据的最常用方法是使用YAML:

settings.yml

user1:
  path: /
  days: 5

user2:
  path: /tmp/
  days: 3

然后将其加载到您的代码中:

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

您可以使用to_yaml创建YAML文件:

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

也就是说,您也可以使用load

包含直接的Ruby代码
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

答案 1 :(得分:6)

您也可以使用Marshal

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 :(得分:2)

一个非常简单的方法是使用eval。

<强>的config.txt

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

<强> program.rb

configuration = eval(File.read("./config.txt"))
puts configuration['user1']