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

これは完全な Pyramid レシピです:

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パイプをディレクトリとして更新しようとしましたが、これも失敗していました。bashと を使用してこれを解決しました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 に答える