- 新增 kenaito-conf-ruby-client(Ruby 2.5+)及对应 demo - 新增 Dockerfile.ruby - README 技术栈移除 C,项目结构补充 Ruby 客户端 - README_EN.md 同步更新 - README_DOCKERFILE.md 补充 Ruby 构建命令
75 lines
1.9 KiB
Ruby
75 lines
1.9 KiB
Ruby
require_relative '../kenaito-conf-ruby-client/lib/kenaito_conf'
|
|
|
|
def get_env_var(key, default)
|
|
value = ENV[key]
|
|
(value && !value.empty?) ? value : default
|
|
end
|
|
|
|
# 配置值(可被远程配置覆盖)
|
|
config_values = {
|
|
'database.host' => get_env_var('DATABASE_HOST', '192.168.1.1'),
|
|
'database.port' => get_env_var('DATABASE_PORT', '8888'),
|
|
'database.name' => get_env_var('DATABASE_NAME', 'xxxx'),
|
|
'database.user' => get_env_var('DATABASE_USER', 'xxxx'),
|
|
'database.password' => get_env_var('DATABASE_PASSWORD', 'xxxxxxxx')
|
|
}
|
|
|
|
config = Kenaito::Conf::Config.new(
|
|
base_url: get_env_var('KENAITO_BASE_URL', 'http://localhost:8080'),
|
|
app_name: get_env_var('KENAITO_APP_NAME', 'kenaito-ruby-demo'),
|
|
env: get_env_var('KENAITO_ENV', 'daily'),
|
|
version: get_env_var('KENAITO_VERSION', 'latest'),
|
|
token: get_env_var('KENAITO_TOKEN', ''),
|
|
sync_interval: get_env_var('KENAITO_SYNC_INTERVAL', '10').to_i,
|
|
cache_dir: get_env_var('KENAITO_CACHE_DIR', '.')
|
|
)
|
|
|
|
client = Kenaito::Conf::Client.new(config)
|
|
|
|
# 监听配置变更
|
|
client.on_change do |changed|
|
|
puts "Config changed:"
|
|
changed.each do |key, value|
|
|
puts " #{key} = #{value}"
|
|
if config_values.key?(key)
|
|
config_values[key] = value
|
|
puts " [updated] #{key} = #{value}"
|
|
end
|
|
end
|
|
end
|
|
|
|
# 启动客户端
|
|
begin
|
|
client.start
|
|
remote = client.get_all
|
|
config_values.each do |key, _|
|
|
if remote.key?(key)
|
|
config_values[key] = remote[key]
|
|
end
|
|
end
|
|
puts "loaded #{remote.size} configs from remote\n\n"
|
|
rescue => e
|
|
puts "Failed to init config client, using local defaults: #{e.message}\n\n"
|
|
end
|
|
|
|
# 显示当前配置
|
|
puts "Current configs:"
|
|
config_values.keys.sort.each do |key|
|
|
puts " #{key} = #{config_values[key]}"
|
|
end
|
|
|
|
puts "\nListening for config changes... (press Ctrl+C to stop)\n"
|
|
|
|
# 信号处理
|
|
trap('INT') do
|
|
puts "\nShutting down..."
|
|
client.stop_client
|
|
exit(0)
|
|
end
|
|
|
|
# 同步循环
|
|
until client.stop
|
|
client.sync_once
|
|
sleep(config.sync_interval)
|
|
end
|