我正在编写一些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。有一种简单的方法吗?
提前致谢!
答案 0 :(得分:4)
考虑使用ERB。 http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/ERB.html
它内置于Ruby的标准库中,完全符合您的要求。