0

我最近一直在和 chef 一起部署应用程序。我正在尝试在 opscode 提供的应用程序和 application_php 食谱之上构建。但我对厨师有点陌生,我真的不明白我应该怎么做。

我为我的应用创建了一本食谱。食谱目前看起来像这样:

app = node.run_state[:current_app]

secrets = Chef::EncryptedDataBagItem.load("secrets", "my_app")

application "my_app" do
  path "/var/www/sites/my_app/current"
  owner node['my_app']['owner']
  group node['my_app']['group']
  repository "some repository here"
  if secrets["deploy_key"]
    ruby_block "write_key" do
      block do
        f = ::File.open("#{app['deploy_to']}/id_deploy", "w")
        f.print(secrets["deploy_key"])
        f.close
      end
      not_if do ::File.exists?("#{app['deploy_to']}/id_deploy"); end
    end

    file "#{app['deploy_to']}/id_deploy" do
      owner node['my_app']['owner']
      group node['my_app']['group']
      mode '0600'
    end

    template "#{app['deploy_to']}/deploy-ssh-wrapper" do
      source "deploy-ssh-wrapper.erb"
      owner node['my_app']['owner']
      group node['my_app']['group']
      mode "0755"
      variables app.to_hash
    end
  end
end

角色:my_app.json

{
    "name": "my_app",
    "chef_type": "role",
    "json_class": "Chef::Role",
    "default_attributes": {
    },
    "description": "Install my_app Web Server",
    "run_list": [
        "recipe[apache2]",
        "recipe[php]",
        "recipe[application]",
        "recipe[my_app]"
    ],
    "override_attributes": {
    }
}

但是当我运行knife bootstrap example.com -r role[my_app] ...我收到以下错误:

================================================================================
Recipe Compile Error
================================================================================

Chef::Exceptions::RecipeNotFound
--------------------------------
could not find recipe my_app for cookbook application

[2012-11-12T15:22:10+00:00] ERROR: Running exception handlers
[2012-11-12T15:22:10+00:00] FATAL: Saving node information to /var/chef/cache/failed-run-data.json
[2012-11-12T15:22:10+00:00] ERROR: Exception handlers complete
[2012-11-12T15:22:10+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2012-11-12T15:22:10+00:00] FATAL: Chef::Exceptions::RecipeNotFound: could not find recipe my_app for cookbook application

好像做对了什么。有谁知道我应该如何扩展 application 和 application_php 食谱?

4

1 回答 1

0

我意识到我做错了嘿嘿。似乎我在网上找到的大多数教程都使用了已弃用的做事方法。

应用程序堆栈为您处理一切。无需制作部署代码。

要使其工作,您需要删除运行列表的应用程序。要使用 application 和 application_php,您需要在 metadata.rb 中定义依赖关系。

然后你可以像这样创建食谱:

secrets = Chef::EncryptedDataBagItem.load("secrets", "my_app")

application "my_app" do
  path "/var/www/my_app"
  repository "repository url"
  revision "master"
  deploy_key secrets["deploy_key"]
end
于 2012-11-13T09:04:23.533 回答