2

在运行 Pyramid 的配方时,以下内容失败chef-solo

================================================================================
Error executing action `create` on resource 'directory[/etc/service/pyramid/supervise/status]'
================================================================================

NoMethodError
-------------
undefined method `checksum' for Chef::Resource::Directory

Resource Declaration:
---------------------
# In /var/chef-solo/cookbooks/project/recipes/pyramid.rb

 22:     directory "#{node['runit']['service_dir']}/pyramid#{dir}/supervise/#{f}" do
 23:       owner login
 24:       group login
 25:     end
 26:   end

Compiled Resource:
------------------
# Declared in /var/chef-solo/cookbooks/project/recipes/pyramid.rb:22:in `block (2 levels) in from_file'

directory("/etc/service/pyramid/supervise/status") do
  provider Chef::Provider::Directory
  action :create
  retries 0
  retry_delay 2
  path "/etc/service/pyramid/supervise/status"
  cookbook_name :project
  recipe_name "pyramid"
  owner "myusername"
  group "myusername"
  mode 420
end

为什么会出现“未定义的方法checksum”,我该怎么办?

此错误似乎不一致。有时厨师运行似乎挂起。其他时候,经过多次运行,厨师能够通过这一点。

我在一个普通的 Ubuntu 服务器 12.04LTS 上运行,安装了一个部署脚本的厨师:

sudo apt-get install -y ruby1.9.1 ruby1.9.1-dev make &&
sudo gem1.9.1 install chef ohai --no-rdoc --no-ri

这是完整的金字塔食谱:

login = node["user"]["login"]
home = node["user"]["home"]
app_root = node["user"]["app_root"]

runit_service "pyramid" do #, :template_name => "site" do
  template_name "pyramid"
  owner login
  group login
  options({
    :login => login,
    :app_root => app_root,
    :home => home,
    :config => "#{app_root}/config/gunicorn.conf.py"
  })
end

["", "/log"].each do |dir|
  directory "#{node['runit']['service_dir']}/pyramid#{dir}/supervise" do
    mode "0755"
  end
  %w(ok control status).each do |f|
    directory "#{node['runit']['service_dir']}/pyramid#{dir}/supervise/#{f}" do
      owner login
      group login
    end
  end
end
4

1 回答 1

3

这是我的解决方案 - 在一些黑客攻击加上来自@Draco-ater 的提示后发现......

在配方引用directory("/etc/service/pyramid/supervise/status")的地方,状态“目录”是一个已经存在的文件,它会导致问题。

此外,该脚本还尝试将controlok管道更新为目录 - 这也失败了。我通过使用bashand解决了这个问题chmod

bash "give_perms_pyramid" do
    user "chef"
    cwd "#{node['runit']['service_dir']}/pyramid#{dir}/supervise"
    code <<-EOH
        sudo chown myuser:root control
        sudo chmod g+rw control
    EOH

也许这会帮助某人。

于 2012-12-13T09:46:04.443 回答