首页 文章

ImportError - 将Falcon应用程序部署到AWS Elastic Beanstalk

提问于
浏览
1

我在部署到Elastic Beanstalk后遇到了ImportError . 我们正在运行Falcon来制作API . 我已成功使用EB CLI初始化应用程序,创建环境并部署我的代码 . 我们使用Python 2.7(现在) .

应用程序/环境的AWS EB站点说一切顺利,但是当我向api发送请求时,日志会显示以下错误:

[Wed Nov 30 06:02:25.555507 2016] [:error] [pid 29352] [remote 127.0.0.1:56624] Traceback (most recent call last):
[Wed Nov 30 06:02:25.555524 2016] [:error] [pid 29352] [remote 127.0.0.1:56624]   File "/opt/python/current/app/api/app.py", line 12, in <module>
[Wed Nov 30 06:02:25.555549 2016] [:error] [pid 29352] [remote 127.0.0.1:56624]     from middlewares import require_json
[Wed Nov 30 06:02:25.555566 2016] [:error] [pid 29352] [remote 127.0.0.1:56624] ImportError: No module named middlewares
[Wed Nov 30 06:02:26.558411 2016] [:error] [pid 29352] [remote 127.0.0.1:60720] mod_wsgi (pid=29352): Target WSGI script '/opt/python/current/app/api/app.py' cannot be loaded as Python module.

本地我的进口工作得很好 . api的相关部分如下所示:

-api/
    -__init__.py #import app
    -app.py
    -middlewares/
        -__init__.py #import require_json
        -require_json.py

我的app.py文件的第12行:

from middlewares import require_json

但是日志一直在说这是一个ImportError . 关于这里发生了什么的任何想法?我很困惑 .

至于 __init__.py 文件导入模块;这是一个遗留代码库,我不确定改变它的含义是什么,除了测试失败 .

EDIT

今天早上我尝试评论出那些导入行,但这只会让我在下次导入时出错:

[Wed Nov 30 21:52:00.699228 2016] [:error] [pid 11254] [remote 172.31.8.163:37352] Traceback (most recent call last):
[Wed Nov 30 21:52:00.699245 2016] [:error] [pid 11254] [remote 172.31.8.163:37352]   File "/opt/python/current/app/api/app.py", line 15, in <module>
[Wed Nov 30 21:52:00.699270 2016] [:error] [pid 11254] [remote 172.31.8.163:37352]     import resources
[Wed Nov 30 21:52:00.699288 2016] [:error] [pid 11254] [remote 172.31.8.163:37352] ImportError: No module named resources

我在this article推荐了've also done what' .

import sys
sys.path.insert(0, '/opt/python/current/app')

1 回答

  • 3

    使用您的代码的结构化方式,您不应该直接在 app.py 文件中指向Apache的 WSGIScriptAlias 指令 .

    您需要做的是创建一个单独的WSGI脚本文件以与 WSGIScriptAlias 一起使用,其中包含:

    from api.app import application
    

    您还需要配置mod_wsgi,以便 api 目录的父目录位于Python模块搜索路径中 . 您可以在mod_wsgi配置中执行,也可以在此新的WSGI脚本文件中执行此操作 .

    假设您已将WSGI脚本文件 app.wsgi 添加到与 api 作为子目录相同的目录中,它可能包括:

    import os
    import sys
    
    sys.path.insert(0, os.path.dirname(__file__))
    
    from api.app import application
    

相关问题