使用 Chef + Berkshelf 在 OpsWorks 上运行 Python 时出错

Posted

技术标签:

【中文标题】使用 Chef + Berkshelf 在 OpsWorks 上运行 Python 时出错【英文标题】:Error running Python on OpsWorks with Chef + Berkshelf 【发布时间】:2016-09-26 22:51:19 【问题描述】:

我正在尝试让 Python 2.7 在我的 OpsWorks 实例上运行,但我一直在启动时遇到错误。

我的 OpsWork 堆栈使用 Chef 11.10 版和 Berkshelf 3.2.0 版设置。

我的metadata.rb 包含以下内容:

depends           "poise-python"
depends           "apt", ">= 1.8.2"

我的Berksfile 设置为:

source "https://supermarket.chef.io"

cookbook 'poise-python'
cookbook 'apt'

每次我启动时都会收到以下错误,我不知道如何解决它:

Halite 不兼容 no_lazy_load false,请设置 在您的 Chef 配置文件中 no_lazy_load 为 true。

我尝试添加一个chef/configuration.rb 文件以将no_lazy_load 设置为true,但它似乎不起作用。坦率地说,我是 OpsWorks 和 Chef 的新手,所以我可能会遗漏一些非常基本的东西。

更多信息

我要接管的堆栈最初引用 python 而不是 poise-python,但当我尝试使用该堆栈运行时,我已从该堆栈切换以解决另一个错误(但我猜是相关的):

此资源使用 Chef 12.5 自定义资源编写,需要 至少 Chef 12.0 与 compat_resource 食谱一起使用,它不会 与 Chef 11.x 客户端合作,这些用户必须固定他们的食谱 到旧版本或升级。

我尝试固定到旧版本的 python,但仍然无法正常工作。基本上,我知道这个实例可以运行(以前的维护者已经运行),但我不确定我缺少什么。

【问题讨论】:

【参考方案1】:

经过一番谷歌搜索,我想出了如何在不升级 Chef 版本的情况下完成这项工作。我在我的 Berksfile 中添加了以下行:

cookbook 'build-essential', '= 3.2.0'

【讨论】:

【参考方案2】:

我的食谱与 Chef 11 不兼容,您必须将堆栈升级到 Chef 12。

【讨论】:

所以我应该补充一点,我接管了一个在 Chef 11.10 下配置的其他地方工作的系统。它最初使用 python 而不是 poise-python 但我在运行它时遇到了不同的错误,还抱怨 Chef 版本。我将使用该信息更新问题,但基本上我试图避免升级 Chef 版本,因为我不熟悉它。 我没有在 OpsWorks 上进行任何测试,但旧的 python 食谱目前已完全弃用且不受支持。

以上是关于使用 Chef + Berkshelf 在 OpsWorks 上运行 Python 时出错的主要内容,如果未能解决你的问题,请参考以下文章

我已经安装了 chef-dk 并开始使用 berkshelf 但berks 上传失败

随着vagrant-berkshelf被弃用,是否有可能从Vagrant驱动构建,而Chef只作为供应者?

Managing Chef Cookbooks the Berkshelf way

Berkshelf:为 opsworks 合并多个同名的食谱

百胜更新后找不到食谱

如何在 AWS Ops-Work 上从 chef-11.10 迁移到 chef-12?