我在使用Chef时已经相当新了:我需要在CentOS 7上配置我的Apache
所以我创建了一个名为post_inst_config.rb
的小食谱,我以这种方式放入我的厨师运行列表......
"recipe[mapserver_install::inst_apache2]",
"recipe[mapserver_install::post_inst_config]"
这是你的post_inst_config.rb
#Add to /etc/httpd/conf/httpd.conf the string: ScriptAlias /cgi-bin/ /var/www/cgi-bin/
File.open("/etc/httpd/conf/httpd.conf", 'a') do |file|
file.write "ScriptAlias /cgi-bin/ /var/www/cgi-bin/"
file.write "\n"
end
#Define the following symblink: ln -s /usr/bin/mapserv /var/www/cgi-bin/mapserv
link '/usr/bin/mapserv' do
to '/var/www/cgi-bin/mapserv'
end
#Create the directory for the imagepath ...
directory '/var/www/html/output' do
owner 'root'
group 'root'
mode '0755'
action :create
end
#Restart apache ....
service "httpd" do
action :restart
end
当我尝试执行我的厨师食谱时,我得到了这个错误......
================================================================================
Recipe Compile Error in /var/chef/cache/cookbooks/mapserver_install/recipes/post_inst_config.rb
================================================================================
Errno::ENOENT
-------------
No such file or directory @ rb_sysopen - /etc/httpd/conf/httpd.conf
请注意,如果我尝试在没有安装post_inst_config.rb
Apache的情况下执行我的运行列表并且工作正常。
建议表示赞赏......
答案 0 :(得分:1)
这是一个两遍问题,请参阅https://coderanger.net/two-pass/了解详情,但基本上事情并没有按照您认为的顺序发生。将该代码移动到ruby_block
资源(但请注意,您不会检查该行是否已经存在,因此每次运行时都会重新添加它)或者我们会像poise-file
食谱那样或line
食谱,其中包含用于修改文件的资源。我们真的不推荐这种修改文件的方式,使用template
资源一次控制整个文件内容要容易得多,也更安全。