Ruby 在Chef中读取用户特定的环境变量

Ruby 在Chef中读取用户特定的环境变量,ruby,environment-variables,chef-infra,chef-recipe,knife,Ruby,Environment Variables,Chef Infra,Chef Recipe,Knife,我是Chef和Ruby的新手,我试图了解如何从特定的Linux/Windows用户那里读取环境变量,并使用它来放置文件 我想做的是为客户端和DB安装更新我们的Oracle tnsnames.ora文件 这些文件可能位于Windows中的C:\oracle或C:\Program files\oracle或Linux中的/u01/app/oracle/product/11.2/network/admin或/u01/app/oracle/producdt/10.2/network/admin等目录中

我是Chef和Ruby的新手,我试图了解如何从特定的Linux/Windows用户那里读取环境变量,并使用它来放置文件

我想做的是为客户端和DB安装更新我们的Oracle tnsnames.ora文件

这些文件可能位于Windows中的C:\oracle或C:\Program files\oracle或Linux中的/u01/app/oracle/product/11.2/network/admin或/u01/app/oracle/producdt/10.2/network/admin等目录中

如果不将环境变量读入配方并使用它,我无法100%肯定我会知道确切的位置

我在读有关{ENV['HOME']}的文章,但我不太清楚这是否是我想要使用的语法类型。

。我怀疑

template "#{Dir.home("oracle")}/network/admin/tnsnames.ora" do
    source "tnsnames.ora.erb"
    [...]
end

你想做什么就做什么。当然,这仅在除了主目录的位置之外,操作系统之间没有差异的情况下才有效。

使用ENV['home'],而不是{ENV['home']}。第二种方法仅适用于将其嵌入字符串的情况。您的代码必须以该用户的身份运行才能读取其环境变量。感谢您的反馈。在考虑这个问题时,我考虑了recipes/default.rb和模板代码块。模板{ENV['ORACLE_HOME']}/network/admin/tnsnames.ora do source tnsnames.ora.erb所有者ORACLE组dba mode 0644 end这似乎仍然不正确,尽管。。。