Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 我可以从命令行传递要由erb渲染的变量吗?_Ruby_Erb_Chef Recipe - Fatal编程技术网

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>