我可以从命令行传递erb呈现的变量吗?

时间:2014-07-25 19:34:07

标签: ruby erb chef-recipe

我在erb template中有一个chef cookbook,用于为我的vhost环境和我的vagrant环境配置aws opsworks。我想在我的持续集成服务器上使用这个模板,为我的非厨师托管机器生成vhost,然后再推出它。

假设我有以下错误:

<VirtualHost <%= @params[:http_host] %>:<%= @params[:http_port] || node['apache']['listen_ports'].first %>>
    ServerName <%= @params[:server_name] %>
    ServerAlias <% @params[:server_aliases].each do |a| %><%= a %> <% end %>

    DocumentRoot <%= @params[:docroot] %>
</VirtualHost>

如果我想直接致电erb,我如何填充这些变量?

我知道我可以调用erb -r library vhost.conf.erb加载要利用的库,可以将变量设置为erb的参数,还是需要创建自定义库。如果我需要一个自定义库,那会怎么样?

1 个答案:

答案 0 :(得分:4)

从Ruby 2.2开始,你可以set local variables in Erb from the command line

您需要更改代码以使用局部变量而不是实例变量。例如,如果您(从代码中删除):

<VirtualHost <%= http_host %>:<%= http_port %>>

然后你可以用:

来调用它
$ erb http_host=http://example.com http_port=1234 my_file.erb

,结果将是:

<VirtualHost http://example.com:1234>