Ruby中配置对象的共享实例
问题 我正在开发一个简单的Ruby CLI,它需要将其配置信息存储在一个平面文件中。我有一个Ruby中配置对象的共享实例,ruby,Ruby,问题 我正在开发一个简单的Ruby CLI,它需要将其配置信息存储在一个平面文件中。我有一个Configurator类,负责所有数据管理、保存到文件系统等 尽管随意实例化Configurator对象是完全合法的,但我还想提供一个共享实例(这样它在CLI中随处可用)。在Ruby中,似乎有很多关于如何正确实现这一点的观点,而我也深信不疑( 我的第一次尝试 配置器.rb 配置.rb 知道了这一点,我的配置模块可以这样使用: include Configuration # Initialize our
Configurator
类,负责所有数据管理、保存到文件系统等
尽管随意实例化Configurator
对象是完全合法的,但我还想提供一个共享实例(这样它在CLI中随处可用)。在Ruby中,似乎有很多关于如何正确实现这一点的观点,而我也深信不疑(
我的第一次尝试
配置器.rb
配置.rb
知道了这一点,我的配置
模块可以这样使用:
include Configuration
# Initialize our shared Configurator.
Configuration.load_configuration('~/.app_config')
# Use it.
p configuration
# => #<Configurator:0x0000010126f8e8 @config_path="/Users/abach/.app_config">
包含配置
#初始化我们的共享配置程序。
配置。加载配置(“~/.app\u config”)
#使用它。
p构型
# => #
我已经证实了这一点,但有几种异味:
Configuration.load\u Configuration
感觉很奇怪;不知道该怎么说。但这很可能是我的问题。:)谢谢你的帮助 您编写配置管理是为了学习如何做这样的事情,还是只是想解决一个问题(Ruby CLI需要将其配置信息存储在平面文件中)
在后一种情况下,请特别注意。虽然很有趣,但配置库并不适合我的需要(例如,它将数据存储在Ruby中,而我的数据需要能够被非Ruby环境访问)。
module Configuration
@@configuration = nil
def configuration
if @@configuration
@@configuration
else
fail 'Attempted to access `configuration` before ' \
'executing `load_configuration`'
end
def load_configuration(path)
@@configuration = Configurator.new(path)
end
end
include Configuration
# Initialize our shared Configurator.
Configuration.load_configuration('~/.app_config')
# Use it.
p configuration
# => #<Configurator:0x0000010126f8e8 @config_path="/Users/abach/.app_config">