我有一个在linux服务器上运行的ruby脚本。它不使用铁轨或任何东西。它基本上是一个命令行ruby脚本,可以传递这样的参数:./ruby_script.rb arg1 arg2
如何将参数抽象为配置文件,例如yaml文件或其他东西?你能提供一个如何做到这一点的例子吗?
提前谢谢。
答案 0 :(得分:6)
首先,您可以运行写入YAML配置文件的独立脚本:
require "yaml"
File.write("path_to_yaml_file", [arg1, arg2].to_yaml)
然后,在您的应用中阅读:
require "yaml"
arg1, arg2 = YAML.load_file("path_to_yaml")
# use arg1, arg2
...
答案 1 :(得分:2)
您可以使用我作为neomind-dashboard-public的一部分编写的系统,这是一个独立的Ruby脚本under the open-source MIT License。
您的项目config
folder应包含config.yml
文件及其配置数据,例如this:
updater script:
code URL: https://github.com/NeomindLabs/neomind-dashboard-public
Leftronic dashboard:
dashboard access key: 'bGVmdHJvbmljaXNhd2Vz' # find on https://www.leftronic.com/api/
stream names:
statuses for CI project names:
"Project Alpha": project_alpha_ci_status
"Project Beta": project_beta_ci_status
"Project Gamma": project_gamma_ci_status
# etc.
将文件lib/config_loader.rb
复制到您的项目中。这是一个非常小的文件,使用the built-in yaml
library加载YAML配置文件。
# encoding: utf-8
require 'yaml'
class ConfigLoader
def initialize
load_config_data
end
def [](name)
config_for(name)
end
def config_for(name)
@config_data[name]
end
private
def load_config_data
config_file_path = 'config/config.yml'
begin
config_file_contents = File.read(config_file_path)
rescue Errno::ENOENT
$stderr.puts "missing config file"
raise
end
@config_data = YAML.load(config_file_contents)
end
end
最后,在使用配置文件的每个文件中,遵循此模式(此示例来自文件lib/dashboard_updater.rb
):
require_relative 'config_loader'
CONFIG
常量
class DashboardUpdater
CONFIG = ConfigLoader.new.config_for("Leftronic dashboard")
CONFIG
读取配置数据 def initialize_updater
access_key = CONFIG["dashboard access key"]
@updater = Leftronic.new(access_key)
end
答案 2 :(得分:0)
使用接受的答案中的方法从YAML文件中读取时遇到undefined local variable or method
错误。我用稍微不同的方式做到了:
按上述方式写信:
require "yaml"
File.write("path/to/yaml", ["test_arg_1", "test_arg_2"].to_yaml)
使用稍微的变化阅读:
require "yaml"
arg1, arg2 = YAML.load(File.read("path/to/yaml"))
puts arg1
#=> test_arg_1
puts arg2
#=> test_arg_2