Java .properties文件相当于Ruby?

Mik*_*one 26 ruby file-io

我需要在文件中存储一些简单的属性并从Ruby访问它们.

我非常喜欢.properties文件格式,它是Java中这类东西的标准(使用java.util.Properties类)......它简单易用,易于阅读.

那么,是否有一个Ruby类可以让我从这样的文件中加载一些键值对而不需要花费太多精力?

我不想使用XML,所以请不要建议REXML(我的目的不保证"尖括号税").

我考虑过滚动我自己的解决方案......它可能是大约5到10行的代码顶部,但我仍然宁愿使用现有的库(如果它本质上是从文件构建的散列)......就像那样把它降到一线......


更新:它实际上是一个直接的Ruby应用程序,而不是rails,但我认为YAML会做得很好(它在我的脑海里,但我已经忘记了它......已经看过但从未使用过),谢谢大家!

Rya*_*igg 27

这适用于Rails应用程序还是Ruby应用程序?

真的要么你可以将你的属性粘贴在yaml文件中,然后YAML::Load(File.open("file"))它.


来自Mike Stone的说明:实际上做得更好:

File.open("file") { |yf| YAML::load(yf) }
Run Code Online (Sandbox Code Playgroud)

要么

YAML.load_file("file")
Run Code Online (Sandbox Code Playgroud)

正如ruby文档建议的那样,否则文件将不会被关闭,直到垃圾收集,但不管是好的建议:-)


Aar*_*nni 10

另一个选择是简单地使用另一个Ruby文件作为配置文件.

例如,创建一个名为'options'的文件

{
    :blah   => 'blee',
    :foo    => 'bar',
    :items  => ['item1', 'item2'],
    :stuff  => true
}
Run Code Online (Sandbox Code Playgroud)

然后在您的Ruby代码中执行以下操作:

ops = eval(File.open('options') {|f| f.read })
puts ops[:foo]
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在评估来自不受信任的来源(例如Web表单)的代码,则会出现此问题,此答案适用于有关阅读选项文件的问题.如果有人想修改它,他们也可以修改阅读它的红宝石代码...... (3认同)
  • 这个选项不提供滥用的可能吗?eval将执行任何任意Ruby代码,例如,可以对文件系统执行令人讨厌的事情. (2认同)

Dan*_*per 6

如上所述,YAML将完美地完成它.举个例子,在我的一个Ruby脚本中,我有一个YAML文件,如:

migration:
  customer: Example Customer
  test:     false
sources:
- name:     Use the Source
  engine:   Foo
- name:     Sourcey
  engine:   Bar
Run Code Online (Sandbox Code Playgroud)

然后我在Ruby中使用:

config = YAML.load_file(File.join(File.dirname(__FILE__), ARGV[0]))
puts config['migration']['customer']

config['sources'].each do |source|
  puts source['name']
end
Run Code Online (Sandbox Code Playgroud)


Ros*_*ill 5

inifile - http://rubydoc.info/gems/inifile/2.0.2/frames将支持基本的 .properties 文件以及带有 [SECTIONS] 的 .ini 文件,例如。

[SECTION]
key=value
Run Code Online (Sandbox Code Playgroud)

当您的数据具有复杂的结构但可以使用空格、制表符、行尾等繁琐时,YAML 是很好的 - 如果文件不是由程序员维护,这可能会导致问题。相比之下.properties.ini文件更宽容,如果您不需要通过 YAML 提供的深层结构,则可能适用。