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

标签 ruby erb chef-recipe

我在chef cookbook 中有一个erb 模板,它为我的vagrant 环境和我的vhost 配置了我的vhost aws opsworks 环境。我想在我的持续集成服务器上使用这个模板,在它推出之前为我的非 Chef 管理的机器生成虚拟主机。

假设我有以下 erb:

<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 的参数,或者我是否需要创建自定义库。如果我需要一个自定义库,它会是什么样子?

最佳答案

从 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>

关于ruby - 我可以从命令行传递由 erb 呈现的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24963243/

相关文章:

chef-infra - 如何让 yum_package 资源在 chef_gem 包之前运行?

shell - 如何使用 Chef 配方添加 cron 作业条目

ruby - Chef : Read variable from file and use it in one converge

ruby - Liquid 模板在自定义 block 中获取 token

ruby-on-rails - Ruby on Rails 的 WordPress 替代品是什么?

ruby-on-rails - rails .order 方法不起作用

ruby-on-rails - 在 options_for_select 标记的选择列表中包含第一项的空白

ruby - Ruby 中的无序耦合

ruby-on-rails - 如何在同一个 html.erb 表单中获取 collection_select 的值

javascript - coffeescript 中的 erb(Rails 3.2.13)?