Linux サーバーで実行する ruby スクリプトがあります。レールなどを使用していません。基本的には、次のような引数を渡すことができるコマンドライン Ruby スクリプトです。./ruby_script.rb arg1 arg2
引数をyamlファイルなどの構成ファイルに抽象化するにはどうすればよいですか? これを行う方法の例を挙げていただけますか?
前もって感謝します。
Linux サーバーで実行する ruby スクリプトがあります。レールなどを使用していません。基本的には、次のような引数を渡すことができるコマンドライン Ruby スクリプトです。./ruby_script.rb arg1 arg2
引数をyamlファイルなどの構成ファイルに抽象化するにはどうすればよいですか? これを行う方法の例を挙げていただけますか?
前もって感謝します。
まず、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
...
私が作成したシステムは、オープンソースの MIT License の下でスタンドアロンの Ruby スクリプトであるneomind-dashboard-public の一部として使用できます。
プロジェクトのconfig
フォルダーには、次のようなconfig.yml
構成データを含むファイルが含まれている必要があります。
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
ファイルをプロジェクトにコピーします。これは、組み込みyaml
ライブラリを使用して 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
構成ファイルの第 1 レベルのキーを使用して定数をロードします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
undefined local variable or method
受け入れられた回答のメソッドを使用して YAML ファイルから読み取るときにエラーが発生しました。私は少し異なる方法でそれを行いました:
上記のように書き込みます。
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