使用ruby从模板中写入文件

时间:2012-11-10 14:32:18

标签: ruby

我正在编写一些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。有一种简单的方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:4)

考虑使用ERB。 http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/ERB.html

它内置于Ruby的标准库中,完全符合您的要求。