在erb模板中点

时间:2014-11-21 21:44:38

标签: python ruby chef erb

我有一个像这样被丢弃的厨师模板列表:

scripts.each do |script|
    template "#{dir}/{script}.py" do 
         variables({ "keys" => keys })
    end
end

每个模板都输出一个python脚本。其中一个脚本有点要求。由于我们运行的脚本从服务器更改为服务器,因此我不能简单地在所有服务器上进行pip安装。我试过这样做:

<%
python_pip "python-dateutil" do 
    virtualenv "/path/to/env"
    version "2.2"
end
%>
from dateutil import parser

然而,厨师模板中不可能出现这种情况,厨师抱怨python_pip不是真正的方法。什么是最好,最优雅,最干净的方式呢?

1 个答案:

答案 0 :(得分:2)

使脚本成为哈希:

{
  'script1.py' => [],
  'script2.py' => %w{dep1 dep2},
}.each do |script, deps|
  deps.each do |dep|
    python_pip dep do
      #stuff
    end
  end
  template "#{dir}/{script}.py" do 
    variables({ "keys" => keys })
  end
end

这样可以保留配方所属的所有逻辑。