我在厨师食谱上遇到了一些挑战。我是新来的厨师,所以请多多包涵。
第 1 步:我的主厨食谱安装了 Ruby Passenger,然后将 Passenger nginx 模块与 Nginx 一起编译。
# Install passenger and nginx module
bash "Install Passenger" do
code <<-EOF
source /usr/local/rvm/scripts/rvm
gem install passenger
EOF
user "root"
not_if { `gem list`.lines.grep(/^passenger \(.*\)/).count > 0 }
end
# Install passenger
# Note that we have to explicitly include the RVM script otherwise it won't setup the environment correctly
bash "Install passenger nginx module and nginx from source" do
code <<-EOF
source /usr/local/rvm/scripts/rvm
passenger-install-nginx-module --auto --prefix=/opt/nginx --auto-download
EOF
user "root"
not_if { File.directory? "/opt/nginx" }
end
第 2 步:之后,我使用模板创建 nginx 配置文件。此配置需要乘客的位置,这取决于步骤 1 的完成情况。
template "/opt/nginx/conf/nginx.conf" do
source "nginx.conf.erb"
action :create
variables(
deploy_user: deploy_user,
passenger_root: `bash -c "source /usr/local/rvm/scripts/rvm; passenger-config --root"`.chomp,
passenger_ruby: `bash -c "source /usr/local/rvm/scripts/rvm; which ruby"`.chomp,
passenger: node[:passenger]
)
end
问题:Chef 似乎在运行开始时编译模板。所以最终发生的是,步骤 2 实际上是在步骤 1 运行之前编译的。这意味着passenger_root 变量为空。它需要先完成第 1 步,然后才能获取passenger_root,然后运行模板。
我尝试将步骤 2 代码包装在 a 中,ruby_block
但这不起作用:undefined method
Chef::Resource::RubyBlock` 的模板'。
不知道在这里做什么,或者对于这样的事情,厨师的最佳做法是什么?
提前致谢,
伦纳德