2

我正在制作一些 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​​。有没有一种简单的方法可以做到这一点?

提前致谢!

4

1 回答 1

4

研究使用 ERB。https://ruby-doc.org/stdlib/libdoc/erb/rdoc/ERB.html

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

于 2012-11-10T17:17:19.403 回答