2

我有一个工作的 Vagrant 实例,现在尝试将“应用程序”食谱与 Chef/Vagrant 一起使用,以便能够从 git 部署并收到以下错误消息:

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

自然,“路径”是“应用”配方中不可或缺的一部分。如果我将其注释掉,则会为下一个属性显示相同的消息。

我已确保 metadata.rb 包含以下行:

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'
4

3 回答 3

1

I was having a very similar issue. In my case what solved it was to remove an incorrect variable that I was using inside the block that was throwing the exception.

For example the following was throwing:

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

with...

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

node['solri']['drupal']['url'] is not set the following works:

ark "apachesolr-drupal" do
  url node['solr']['drupal']['url']
  version node['solr']['drupal']['version']
  path "/tmp"
  action :put
end
于 2014-02-12T04:58:50.343 回答
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-client --version
Chef: 11.10.0
于 2014-04-15T12:45:45.823 回答
0

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

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

如果失败了,检查失败的配方的来源通常很有用。

于 2013-02-13T09:31:21.073 回答