本地用Kitchen测试Cookbook遇LoadError:无法加载chef/mixin/language
解决Kitchen测试Cookbook时出现的
LoadError: cannot load such file -- chef/mixin/language问题 这个坑我之前踩过!本质是Chef版本和windows cookbook版本不兼容导致的——chef/mixin/language这个模块在Chef 13及以上的版本里已经被移除并重命名了,但你用的windows cookbook版本还在依赖这个旧模块,所以编译时就报错了。
下面给你几个可行的解决办法:
方法1:升级windows cookbook到兼容版本
如果你的测试环境用的是Chef 13+,直接把Cookbook对windows的依赖升级到5.0.0及以上版本就行:
- 打开你的Cookbook根目录下的
metadata.rb,修改依赖行:depends 'windows', '>= 5.0.0' - 运行
berks install或者chef update命令更新依赖,之后重新跑Kitchen测试应该就正常了。
方法2:降级Chef Client版本(适合暂时不能升级cookbook的情况)
如果因为某些原因没法升级windows cookbook,那就把Kitchen使用的Chef版本降到12.x系列(这个版本还保留着chef/mixin/language模块):
- 打开
.kitchen.yml,在provisioner配置里指定Chef版本:provisioner: name: chef_zero product_name: chef product_version: 12.21.31 # 选一个稳定的Chef 12版本 - 保存后重新执行
kitchen converge,Kitchen会自动下载对应版本的Chef Client来运行测试。
方法3:临时应急修复(不推荐长期用)
要是赶时间测试,不想改版本,可以手动修改windows cookbook里的代码:
- 找到报错的文件
/tmp/kitchen/cache/cookbooks/windows/libraries/windows_package.rb - 把开头的
require 'chef/mixin/language'替换成require 'chef/mixin/language_helpers' - 这个模块是Chef 13之后的替代版本,大部分方法是兼容的,但这只是临时方案,后续还是建议用前两种方法从根本上解决版本兼容问题。
内容的提问来源于stack exchange,提问作者aks_Nin
相关产品推荐
相关产品推荐

