Elastic beanstalk:构建期间未处理的异常:[Errno 2] 没有这样的文件或目录

Posted

技术标签:

【中文标题】Elastic beanstalk:构建期间未处理的异常:[Errno 2] 没有这样的文件或目录【英文标题】:Elastic beanstalk: Unhandled exception during build: [Errno 2] No such file or directory 【发布时间】:2014-03-07 16:40:01 【问题描述】:

我在 EB 上部署 Django 应用时收到此错误:

2014-02-10 11:04:51,037 [ERROR] Unhandled exception during build: [Errno 2] No such file or directory
Traceback (most recent call last):
  File "/opt/aws/bin/cfn-init", line 122, in <module>
    worklog.build(detail.metadata, configSets)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 117, in build
    Contractor(metadata).build(configSets, self)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 502, in build
    self.run_config(config, worklog)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 511, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 216, in build
    changes['packages'][manager] = CloudFormationCarpenter._packageTools[manager]().apply(packages, self._auth_config)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/apt_tool.py", line 48, in apply
    cache_result = ProcessHelper(['apt-cache', '-q', 'gencaches']).call()
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/util.py", line 406, in call
    shell=isinstance(self._cmd, basestring), env=self._env, cwd=self._cwd)
  File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

...我不知道它为什么以及它在寻找什么文件或目录!有什么想法吗?

ps。我正在使用 Django 1.6.2 和 Python 2.7

这是我在 .ebextensions 中的 app.config:

packages:
  yum:
    python-devel: []
    libpcap: []
    libpcap-devel: []
    libnet: []
    libnet-devel: []
    pcre: []
    pcre-devel: []
    gcc: []
    gcc-c++: []
    automake: []
    autoconf: []
    libtool: []
    make: []
    libyaml: []
    libyaml-devel: []
    libxml2: []
    libxml2-devel: []
    zlib: []
    zlib-devel: []
    file-devel: []
    postgresql: []
    postgresql-devel: []
    geoip: []
    geoip-devel: []
    graphviz: []
    graphviz-devel: []
  apt:
    binutils: []
    libproj-dev: []
    gdal-bin: []
    python-gdal: []

option_settings:
  "aws:elasticbeanstalk:application:environment":
    DJANGO_SETTINGS_MODULE: "mysettings"
  "aws:elasticbeanstalk:container:python":
    NumProcesses: 10
    NumThreads: 1
  "aws:elasticbeanstalk:container:python:staticfiles":
    "/static/": "static/"

更新:

问题出在配置文件中声明的 apt 包,尽管亚马逊在其文档中表示它支持 apt,但事实并非如此,或者至少不支持标准 Linux AMI 64,但支持 Python 2.7!那个 AMI 运行 Linux Red Hat,它不提供 apt,所以我只能依靠 yum。 现在我的问题是弄清楚如何以另一种方式安装我的依赖项,因为该发行版中的 yum 存储库没有我需要的库。

【问题讨论】:

【参考方案1】:

看起来它正在尝试部署到 Ubuntu 机器上,也许您正在部署的机器不是 Ubuntu? (Elastic Beanstalk 一般部署到 Amazon Linux 镜像)

您可以在错误中看到它正在尝试运行仅在 Ubuntu 上可用的 apt-cache 命令:

File "/usr/lib/python2.6/site-packages/cfnbootstrap/apt_tool.py", line 48, in apply
cache_result = ProcessHelper(['apt-cache', '-q', 'gencaches']).call()

【讨论】:

操作系统不是ubuntu,它是python 2.7 64bit的默认Amazon Linux AMI,实际上没有安装apt命令(我通过SSH连接到创建的EC2实例进行了尝试)......我是丢了:( 我也看到了你的另一个问题。无论如何,您的app.config 中有apt 吗? 我定义了一些要下载的 apt 包(根据文档,它应该是一个有效的定义)......检查我在问题中的编辑。谢谢;) 是的,我也看到了。我不知道为什么在文档上。您是否尝试过删除 apt 定义? 我尝试将 yum 用于我需要的一些包,但我收到一条错误消息,指出它们不可用,但使用 apt(至少在设置验证步骤中)我没有收到错误 ps:我'要删除另一个问题,因为在 2 个地方聊天变得很困难;)

以上是关于Elastic beanstalk:构建期间未处理的异常:[Errno 2] 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk:字典更新序列元素 #0 的长度为 1; 2 是必需的

Elastic Beanstalk 滚动环境配置更新

AWS Elastic Beanstalk Worker 在长时间计算期间不活动后超时

在 AWS Elastic Beanstalk 上启动期间 Grails 4 应用程序停止

在 AWS 上使用 Elastic Beanstalk 的 Go Web 应用程序未在日志中显示输出

Elastic Beanstalk 上的 Cronjob 未运行