我正在制作一些 ruby 脚本来编写 nginx 配置文件。
我有两个文件:一个是带有几个占位符的模板,第二个存储了一个包含所有我需要的信息的序列化哈希。
该信息由应用程序的通用名称、url、要使用的端口数和第一个端口组成。
我会做一个简短的例子来说明清楚。这是我的模板:
模板文件:
upstream thin {
{upstream}
}
server {
listen 80;
server_name .{url};
root /var/www/{name};
}
这或多或少是信息如何使用 ruby 代码存储在第二个文件中的方式:
保存信息的 Ruby 脚本:
apps = Hash.new { |h, k| h[k] = Hash.new }
apps["foo"] = {"url" => "foo.co.uk", "ports" => 3, "first" => 3000 }
apps["bar"] = {"url" => "bar.com", "ports" => 2, "first" => 3003 }
serialisedApps = Marshal.dump(apps)
File.open('/home/deploy/data/apps', 'w') {|f| f.write(serialisedApps) }
现在我可以像这样加载这些信息:
apps = Marshal.load File.read('/home/deploy/data/apps')
我可以遍历我的哈希并打印 foo(3000、3001 和 3002)和 bar(3003 和 3004)的端口。
apps.each {|key, value|
pn = value["ports"]
fp = value["first"]
pn.times do |i|
currPort = fp + i
puts "#{key} in port #{currPort}"
end
}
现在,我需要获取该模板并复制 2 个文件(用于“foo”和“bar”),如下所示:
upstream thin {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
}
server {
listen 80;
server_name .foo.co.uk;
root /var/www/foo;
}
现在我只需要加载模板,替换占位符并将其保存在其他地方。我设法用 bash 脚本做到了这一点,但我想避免它并只使用 ruby。有没有一种简单的方法可以做到这一点?
提前致谢!