【问题标题】:Got "undefined method `[]' for nil:NilClass" installing java Cookbook安装 java Cookbook 时得到“nil:NilClass 的未定义方法 `[]'”
【发布时间】:2014-05-07 14:28:56
【问题描述】:

我尝试使用 Chef Solo 和 Berkshelf 设置一个 vagrant vm。我想使用maven 食谱。 “maven”依赖于“java”和“java_ark”(包含在“java”食谱中)。它们都是由 Opscode 创建的。

但是每次我得到这个错误:

NoMethodError

-------------

undefined method `[]' for nil:NilClass




Cookbook Trace:
---------------
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/java/recipes/default.rb:21:in `from_file'
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/platform-slayer/recipes/slayer_worker.rb:2:in `from_file'


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

 14:  # Unless required by applicable law or agreed to in writing, software
 15:  # distributed under the License is distributed on an "AS IS" BASIS,
 16:  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 17:  # See the License for the specific language governing permissions and
 18:  # limitations under the License.
 19:  #
 20:  
 21>> include_recipe "java::#{node['java']['install_flavor']}"
 22:  
 23:  # Purge the deprecated Sun Java packages if remove_deprecated_packages is true
 24:  %w[sun-java6-jdk sun-java6-bin sun-java6-jre].each do |pkg|
 25:    package pkg do
 26:      action :purge
 27:      only_if { node['java']['remove_deprecated_packages'] }
 28:    end
 29:  end
 30:

有人知道这个问题吗? 如果您需要更多信息,请告诉我。

【问题讨论】:

  • 好像没有安装java。你能确认是否安装了java吗?你能打印java -version
  • 感谢您的回复!不,Java 安装因我发布的错误而中止。
  • 哪个操作系统?您可以使用其他包管理工具吗?你能打印roles/base.rb吗?您可能必须覆盖 oracle 下载条款。
  • 没有角色/base.rb 覆盖已经完成,但没有效果。我使用 Xubuntu 作为主机操作系统,使用 Debian Wheezy 作为客户操作系统
  • 如果你的open-jdk没问题,我相信sudo apt-get install openjdk-7-jre会安装java。能不能在外部安装java后再试一下。

标签: java ruby maven chef-infra vagrant


【解决方案1】:

我认为问题在于node['java'] 正在评估为nil

一种可能的解决方案是在说明书或您的节点定义或相关角色定义中定义属性node['java']['install_flavor']

但这看起来像是说明书中的一个错误,因为文档说默认值应该应用于 install_flavor 属性。

【讨论】:

  • 我很确定这是真正的问题。尝试破解该食谱的副本以获取更多信息;例如在未能打印出插值字符串应该是什么的行之前添加一行。
  • 是的,没错,因为必须将配方作为依赖项添加到 metadata.rb 中,谢谢您的帮助! ;)
  • @Morphesus 我认为添加“metadata.rb”解决方案作为答案并选择它作为接受的答案是个好主意。这将使该页面更易于阅读...您帮助我解决了这个问题,但我几乎忽略了这一步。
【解决方案2】:

这绝对看起来像一个错误。对于那些有类似问题的人,我建议只使用 java::openjdk。

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 2011-07-27
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多