Кулинарные книги Opsworks жалуются на отсутствие метода
Я пытаюсь развернуть приложение rails с помощью рецептов Opsworks, полученных из AWS. Я попытался настроить всю вещь, ссылаясь на блог здесь. Что бы он ни говорил, это "php" или "php-app", я заменил на "rails" и название моего приложения. Моя роль JSON для приложения выглядит следующим образом -
{
"name": "hercules",
"description": "OpsWorks recipe run-list for the rails app layer",
"app_type": "rails",
"default_attributes": {
"max_pool_size": 5
},
"run_list": [
"recipe[opsworks_initial_setup]",
"recipe[dependencies]",
"recipe[unicorn::rails]",
"recipe[rails::configure]",
"recipe[deploy::default]",
"recipe[deploy::rails]"
],
"chef_type": "role",
"json_class": "Chef::Role"
}
Когда я пытаюсь развернуть, он хорошо запускает другие рецепты и застревает на этой ошибке для deploy::rails
-
==> app: ================================================================================
==> app: Recipe Compile Error in /tmp/vagrant-chef-3/chef-solo-1/cookbooks/deploy/recipes/rails.rb
==> app: ================================================================================
==> app:
==> app:
==> app: NoMethodError
==> app: -------------
==> app: No resource or method named
opsworks_deploy' for
Chef:: Рецепт "rails"'
==> app:
==> app:
==> app: Cookbook Trace:
==> app: ---------------
==> app: /tmp/vagrant-chef-3/chef-solo-1/cookbooks/deploy/recipes/rails.rb:20:in block in from_file'
==> app: /tmp/vagrant-chef-3/chef-solo-1/cookbooks/deploy/recipes/rails.rb:2:in
каждое '==> приложение: /tmp/vagrant-chef-3/chef-solo-1/cookbooks/deploy/recipes/rails.rb:2:in `from_file'
==> приложение:
Если я открою rails.rb:20
эта функция есть -
opsworks_deploy do
Chef::Log.info("****** hi there *")
Chef::Log.info("#{application}")
Chef::Log.info(deploy.inspect)
app application
deploy_data deploy
end
Я скучаю по чему-то ужасно глупому здесь?
1 ответ
ХОРОШО. Потратив на это 2 дня, в каком-то отдаленном уголке результатов поиска Google я нашел это - https://tickets.opscode.com/browse/CHEF-5011
Вставить некоторую соответствующую информацию ниже -
Изменение в DSL рецепта приводит к тому, что любой NoMethodError или NameError, который происходит внутри блока do..end Ресурса, будет неправильно сообщаться как что-то вроде
Нет имени ресурса или методаfile' for
Chef::Recipe "default"'Например, ошибка в следующем коде рецепта явноno_method_here
бит внутри файлового ресурса:file "/tmp/whatever" do no_method_here end
Однако об ошибке сообщается как:
================================================== ==============================
Ошибка компиляции рецепта в /private/tmp/error_message_repro/repro/recipes/default.rb
================================================== ==============================
NoMethodError
Нет имени ресурса или метода
file' for
Chef:: Рецепт "по умолчанию" 'След поваренной книги:
/private/tmp/error_message_repro/repro/recipes/default.rb:1:in
from_file'`Соответствующее содержимое файла:
/private/tmp/error_message_repro/repro/recipes/default.rb:
1>> file "/tmp/whatever" do 2: no_method_here 3: end 4:
И кто-то вставляет патч и вкладыш -
sudo wget https://github.com/opscode/chef/raw/29e732d97ec7e28b2111aca9f93edfd1bc257c2d/lib/chef/dsl/recipe.rb -O /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.10.0/lib/chef/dsl/recipe.rb --no-check-certificate
(предполагается, что ваш шеф-клиент находится в /opt/chef)
Надеюсь, это поможет кому-то пережить ту же боль.