2

皆さん、私はシェフのソロ属性で途方に暮れています。私はたくさんのレシピを持っています。そのうちのいくつかはロールとしてコード化されていましたが、ロールとしてはほとんど問題なく機能していました。たとえば、私がかつて役割を持っていた場所:

name "apache"
description "Configure php5.3 and apache2 with mod_php."
run_list ( "recipe[php]", "recipe[apache2]" )

私は今持っています:

# "Configure php5.3 and apache2 with mod_php."
include_recipe "php"
include_recipe "apache2"

これはかなり簡単に思えましたが、属性の問題に直面しています。「php」クックブック レシピの default.rb ファイルには属性があり、コードは次のエラーで失敗します。

NoMethodError
-------------
undefined method `[]' for nil:NilClass

標準の php クックブック php/recipes/default.rb の行:

include_recipe "php::#{node['php']['install_method']}"

これは、属性ファイルが実行されていないためだと思います。実行された場合、値 install_method が「package」に設定されているためです。この問題は「php」レシピに固有のものではないと思いますが、そうかもしれません。

特定の属性ファイルがどのような状況で実行されるかを示すものは何も見つかりませんが、ファイルがアルファベット順に読み取られるという不可解なコメントを除いて、いつ述べられていませんでした。

たとえば、クックブックのレシピが使用されている場合、attribute/default.rb は実行されますか? 関係なく、クックブックが使用されるとすぐにすべての属性ファイルがロードされますか? 実行中のレシピと名前が一致する属性ファイルだけですか?

これをデバッグする方法を知っていますか?

編集:いくつかのエラーメッセージを追加します:

[2013-10-26T22:44:10+00:00] DEBUG: Loading Recipe el-drupal-cookbook::apache2_mod_php via include_recipe
[2013-10-26T22:44:10+00:00] DEBUG: Found recipe apache2_mod_php in cookbook el-drupal-cookbook
[2013-10-26T22:44:10+00:00] DEBUG: Loading Recipe php via include_recipe
[2013-10-26T22:44:10+00:00] DEBUG: Found recipe default in cookbook php
[2013-10-26T22:44:10+00:00] DEBUG: filtered backtrace of compile error: /tmp/vagrant-chef-1/chef-solo-1/    cookbooks/php/recipes/default.rb:22:in `from_file',/tmp/vagrant-chef-1/chef-solo-1/cookbooks/el-drupal-    cookbook/recipes/apache2_mod_php.rb:3:in `from_file',/tmp/vagrant-chef-1/chef-solo-1/cookbooks/el-drupal-    cookbook/recipes/drupal_lamp_dev.rb:4:in `from_file'
[2013-10-26T22:44:10+00:00] DEBUG: filtered backtrace of compile error: /tmp/vagrant-chef-1/chef-solo-1/    cookbooks/php/recipes/default.rb:22:in `from_file',/tmp/vagrant-chef-1/chef-solo-1/cookbooks/el-drupal-    cookbook/recipes/apache2_mod_php.rb:3:in `from_file',/tmp/vagrant-chef-1/chef-solo-1/cookbooks/el-drupal-    cookbook/recipes/drupal_lamp_dev.rb:4:in `from_file'
[2013-10-26T22:44:10+00:00] DEBUG: backtrace entry for compile error: '/tmp/vagrant-chef-1/chef-solo-1/    cookbooks/php/recipes/default.rb:22:in `from_file''
[2013-10-26T22:44:10+00:00] DEBUG: Line number of compile error: '22'

================================================================================
Recipe Compile Error in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/el-drupal-cookbook/recipes/drupal_lamp_dev    .rb
================================================================================

NoMethodError
-------------
undefined method `[]' for nil:NilClass


Cookbook Trace:
---------------
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/php/recipes/default.rb:22:in `from_file'
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/el-drupal-cookbook/recipes/apache2_mod_php.rb:3:in `from_file'
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/el-drupal-cookbook/recipes/drupal_lamp_dev.rb:4:in `from_file'


Relevant File Content:
----------------------
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/php/recipes/default.rb:

 15:  # Unless required by applicable law or agreed to in writing, software
 16:  # distributed under the License is distributed on an "AS IS" BASIS,
 17:  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 18:  # See the License for the specific language governing permissions and
 19:  # limitations under the License.
 20:  #
 21:  
 22>> include_recipe "php::#{node['php']['install_method']}"
 23:  
 24:  # update the main channels
 25:  php_pear_channel 'pear.php.net' do
 26:    action :update
 27:  end
 28:  
4

2 に答える 2

3

後で多くのデバッグメッセージが表示され、私はそれを理解しました。必要な "depends" 行を metadata.rb ファイルに含めるのを省略していました。これは、chef が属性またはライブラリ ファイルをロードする必要があることを理解する方法です (混乱を招くことに、まだレシピを見つけることができます)。

于 2013-10-28T12:23:45.360 に答える
1

クックブックが実行されると、そのすべての属性ファイルがロードされます。

Chef 11 を使用している場合は、次の方法で属性をデバッグできますdebug_value

node.debug_value(:php, :install_method)

php レシピの属性ファイルの使用を示すことができますか? 設定されていdefault[:php][:install_method]ますか?あなたが得ているエラーは、 に値がないことを意味しますnode[:php]。ログ出力は、これより前に他のエラーを示していますか?

于 2013-10-26T13:29:48.693 に答える