Ruby 我可以从命令行传递要由erb渲染的变量吗?
我在厨师烹饪书中有一个Ruby 我可以从命令行传递要由erb渲染的变量吗?,ruby,erb,chef-recipe,Ruby,Erb,Chef Recipe,我在厨师烹饪书中有一个erb模板,它为我的vagrant环境和我的aws opsworks环境配置了我的vhost。我想在持续集成服务器上使用此模板为非厨师管理的机器生成vhost,然后再将其推出 假设我有以下雇员再培训局: <VirtualHost <%= @params[:http_host] %>:<%= @params[:http_port] || node['apache']['listen_ports'].first %>> ServerN
erb模板
,它为我的vagrant
环境和我的aws opsworks
环境配置了我的vhost
。我想在持续集成服务器上使用此模板为非厨师管理的机器生成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的参数,或者我需要创建自定义库。如果我需要一个自定义库,它会是什么样子?从Ruby 2.2开始,您可以
您需要更改代码以使用局部变量而不是实例变量。例如,如果您有(从代码中剥离):
结果是:
<VirtualHost http://example.com:1234>
可能重复@hek2mgl,该问题的答案是提供chef范围内的值或作为参数传递给ruby。我很好奇是否可以将值传递给erb。在我的例子中,厨师主要从ohai
知道这些值,其余的由菜谱提供。我希望一个单独的主机能够模拟结果,就像chef在目标上运行它一样,并提供详细信息。好吧,我想我现在得到了一个问题:当在chef内部使用erb时,您的erb正在工作,但您现在问如何直接从命令行使用相同的erb(未更改)。我抓到你了吗?@hek2mgl是的,这就是我想要做的我不认为这是可能的。您可能需要编写一个小的包装器脚本,按照预期填充变量。但它如何与数组一起工作?与OP示例一样,server\u别名
应该是一个数组。启动erb服务器\u别名=['test','bla']模板\u name
时,将返回一个错误:undefined method'each'for“['test','bla']”:String(nomethoderor)
<VirtualHost http://example.com:1234>