28

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

我非常喜欢 .properties 文件格式,它是 Java 中此类事物的标准(使用 java.util.Properties 类)......它简单、易于使用且易于阅读。

那么,是否有一个 Ruby 类可以让我轻松地从这样的文件中加载一些键值对?

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

我已经考虑推出我自己的解决方案......它可能是大约 5-10 行代码顶部,但我仍然宁愿使用现有的库(如果它本质上是从文件构建的哈希)......因为那会把它降低到 1 行....


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

4

6 回答 6

26

这是针对 Rails 应用程序还是 Ruby 应用程序?

真的,您可以将您的属性粘贴到 yaml 文件中,然后再粘贴YAML::Load(File.open("file"))


来自 Mike Stone 的注释:实际上这样做会更好:

File.open("file") { |yf| YAML::load(yf) }

或者

YAML.load_file("file")

正如 ruby​​ 文档所建议的那样,否则文件在垃圾收集之前不会关闭,但无论如何都是好的建议:-)

于 2008-09-19T00:44:43.617 回答
10

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

例如,创建一个名为“选项”的文件

{
    :blah   => 'blee',
    :foo    => 'bar',
    :items  => ['item1', 'item2'],
    :stuff  => true
}

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

ops = eval(File.open('options') {|f| f.read })
puts ops[:foo]
于 2008-09-19T04:46:51.803 回答
6

如上所述,YAML 将完美地做到这一点。例如,在我的一个 Ruby 脚本中,我有一个 YAML 文件,例如:

migration:
  customer: Example Customer
  test:     false
sources:
- name:     Use the Source
  engine:   Foo
- name:     Sourcey
  engine:   Bar

然后我在 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
于 2008-09-19T02:40:50.623 回答
5

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

[SECTION]
key=value

当您的数据结构复杂但可能包含空格、制表符、行尾等时,YAML 是很好的选择——如果文件不是由程序员维护,这可能会导致问题。相比之下.properties.ini文件更宽容,如果您不需要通过 YAML 获得的深层结构,则可能是合适的。

于 2013-03-25T03:41:15.890 回答
3

Devender Gollapally 写了一个来做到这一点:

...虽然我建议更好地使用 YAML 文件。

于 2008-09-19T00:53:56.573 回答
2

您可以考虑使用 YAML,而不是 .properties 样式的配置文件。YAML 在 Ruby on Rails 中用于数据库配置,并在其他语言(Python、Java、Perl 等)中广受欢迎。

Ruby YAML 模块的概述在这里:http ://www.ruby-doc.org/core/classes/YAML.html

YAML的主页在这里:http: //yaml.org

于 2008-09-19T00:49:35.417 回答