Vagrant Provision,Chef Error:您必须至少指定一个cookbook repo路径

时间:2015-07-21 10:12:11

标签: vagrant chef vagrantfile chef-solo vagrant-windows

我正在尝试在Windows 8.1上为Web开发设置Vagrant。我已经遇到了问题undefined method “cheffish” for nil:NilClass,所以我正在使用Vagrant 1.7.4和Chef 12.3.0。

我无法解决此错误:

ERROR: You must specify at least one cookbook repo path

从:

c:\web\project>vagrant provision
==> default: The cookbook path 'c:/web/project/cookbooks' doesn't exist. Ignoring...
==> default: The cookbook path 'c:/web/project/site-cookbooks' doesn't exist. Ignoring...
==> default: Chef 12.3.0 Omnibus package is already installed.
==> default: Running provisioner: chef_solo...
==> default: Detected Chef (latest) is already installed
Generating chef JSON and uploading...
==> default: Running chef-solo...
==> default: stdin: is not a tty
==> default: [2015-07-21T10:08:00+00:00] INFO: Forking chef instance to converge...
==> default: Starting Chef Client, version 12.3.0
==> default: [2015-07-21T10:08:00+00:00] INFO: *** Chef 12.3.0 ***
==> default: [2015-07-21T10:08:00+00:00] INFO: Chef-client pid: 1813
==> default: [2015-07-21T10:08:01+00:00] INFO: Setting the run_list to ["recipe[apt]", "recipe[nodejs]", "recipe[postgresql]", "recipe[postgresql::ser
ver]", "recipe[postgresql::client]"] from CLI options
==> default: [2015-07-21T10:08:01+00:00] INFO: Run List is [recipe[apt], recipe[nodejs], recipe[postgresql], recipe[postgresql::server], recipe[postgr
esql::client]]
==> default: [2015-07-21T10:08:01+00:00] INFO: Run List expands to [apt, nodejs, postgresql, postgresql::server, postgresql::client]
==> default: [2015-07-21T10:08:01+00:00] INFO: Starting Chef Run for vagrant-ubuntu-trusty-64
==> default: [2015-07-21T10:08:01+00:00] INFO: Running start handlers
==> default: [2015-07-21T10:08:01+00:00] INFO: Start handlers complete.
==> default: Running handlers:
==> default: [2015-07-21T10:08:01+00:00] ERROR: Running exception handlers
==> default: Running handlers complete
==> default: [2015-07-21T10:08:01+00:00] ERROR: Exception handlers complete
==> default: [2015-07-21T10:08:01+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> default: Chef Client failed. 0 resources updated in 0.736170145 seconds
==> default: [2015-07-21T10:08:01+00:00] ERROR: You must specify at least one cookbook repo path
==> default: [2015-07-21T10:08:01+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

Vagrantfile

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # Use Ubuntu 14.04 Trusty Tahr 64-bit as our operating system
  config.vm.box = "ubuntu/trusty64"

  # Configurate the virtual machine to use 2GB of RAM
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
  end

  # Forward the Rails server default port to the host
  config.vm.network :forwarded_port, guest: 8000, host: 8000

  # config.omnibus.chef_version = :latest
  config.omnibus.chef_version = "12.3.0"

  # Use Chef Solo to provision our virtual machine
  config.vm.provision :chef_solo do |chef|

    chef.cookbooks_path = ["cookbooks", "site-cookbooks"]

    chef.add_recipe "apt"
    chef.add_recipe "nodejs"
    chef.add_recipe "postgresql"
    chef.add_recipe "postgresql::server"
    chef.add_recipe "postgresql::client"

    chef.json =
    {
      postgresql: {
        users: [
          {
            "username" => "postgres",
            "password" => "password",
            "superuser" => true,
            "replication" => false,
            "createdb" => true,
            "createrole" => false,
            "inherit" => true,
            "replication" => false,
            "login" => true
          }
        ]
      }
    }
  end
end

Cheffile

site "http://community.opscode.com/api/v1"

cookbook 'apt'
cookbook 'nodejs'
cookbook 'build-essential'
cookbook 'postgresql', git: 'https://github.com/phlipper/chef-postgresql'

This vagrant-berkshelf issue看起来很相似,但删除.vagrant.d,再次重新加载和配置并没有解决它。

造成这种情况的原因是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

我安装了Chef Dev Tools,因为这是在Windows上安装Berkshelf 3.0的最简单方法。我在我的项目中根据我的Cheffile设置了一个Berksfile,并在Vagrantfile中启用了Berkshelf。现在它使用Berkshelf提供,它可以工作。

鉴于没有迹象表明Vagrant正在使用Berkshelf,我仍然不相信Berkshelf是问题所在。

了解如何在Windows上安装没有Chef Dev Tools的最新Berkshelf版本仍然会有所帮助。