Chef - Chef :: Resource :: Application中的NoMethodError

时间:2013-02-11 17:21:36

标签: ruby chef vagrant

我有一个工作的Vagrant实例,现在尝试使用Chef / Vagrant的“application”cookbook,以便能够从git部署并收到此错误消息:

FATAL: NoMethodError: undefined method `path' for
 Chef::Resource::Application

当然,“路径”是“应用”配方的组成部分。如果我将其评论出来,则会为下一个属性显示相同的消息。

我确保metadata.rb包含line:

depends 'application'

我还重新加载了vagrant实例,以确保所有更改都传播并运行“berks update”。我应该在哪个方向搜索此错误的原因?

Vagrantfile非常标准,主要包括:

config.vm.provision :chef_solo do |chef|
    chef.json = {
      :mysql => {
        :server_root_password => 'rootpass',
        :server_debian_password => 'debpass',
        :server_repl_password => 'replpass'
      },
      :postgresql => {
        :password => {
          :postgres => "rootpass"
        }
      },
    }

    chef.run_list = [
      "recipe[iw-app::default]",
      "recipe[iw-app::db]",
      "recipe[iw-app::deploy]"
    ]
  end

虽然部署配方包含

user "#{node[:ii][:user]}" do
  system true
end

application node[:ii][:app_name] do
  path        node[:ii][:deploy_to]
  owner       node[:ii][:user]
  group       node[:ii][:group]
  repository  node[:ii][:repo][:url]
  revision    node[:ii][:repo][:branch]
  deploy_key  node[:ii][:repo][:deploy_key]
  packages    ["git"]
end

metadata.rb只是:

depends 'apt'
depends 'python'
depends 'application'
depends 'application_python'
depends 'postgresql'

3 个答案:

答案 0 :(得分:1)

我遇到了一个非常类似的问题。在我的情况下解决它的是删除我在正在抛出异常的块中使用的不正确的变量。

例如,以下是投掷:

ark "apachesolr-drupal" do
  url node['solri']['drupal']['url']
  version node['solr']['drupal']['version']
  path "/tmp"  
  action :put
end

...与

NoMethodError
-------------
No resource or method named `ark' for `Chef::Recipe "drupal"'

node['solri']['drupal']['url']未设置以下作品:

ark "apachesolr-drupal" do
  url node['solr']['drupal']['url']
  version node['solr']['drupal']['version']
  path "/tmp"
  action :put
end

答案 1 :(得分:0)

听起来很基本的东西是错误的,因为你已经开始的调试过程,即注释path命令并基本上得到相同的错误,没有多大意义。

我会检查你对流浪汉和你的环境的假设 - 你是否在你的食谱目录中有正确的烹饪书结构和依赖关系,你是否指定了正确的属性,在chef-solo的输出中是否有任何线索?我发现厨师输出中通常会有一个微妙的指示,表明出了什么问题。

如果没有这一点,那么通过查看失败的食谱的来源通常很有用。

答案 2 :(得分:0)

我遇到了一个非常类似的问题。在我的情况下解决它的是删除我在正在抛出异常的块中使用的不正确的变量。

检查主厨资源语法!

git "#{node['customscripts']['dir']}" do
  repository node['customscripts']['url']
  reference node['customscripts']['ref']
  action :sync
  user root
  group root
end

通过向用户和组添加引号进行修复:

git "#{node['customscripts']['dir']}" do
  ... 
  user "root"
  group "root"
end

Chef版本是:

chef-client --version
Chef: 11.10.0