1

我在部署到Elastic Beanstalk後出現ImportError錯誤。我們正在運行Falcon來製作一個API。我已成功使用EB CLI初始化應用程序,創建環境並部署我的代碼。我們使用Python 2.7(現在)。ImportError - 將Falcon應用部署到AWS Elastic Beanstalk

的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 

線12我app.py文件:

from middlewares import require_json 

但日誌一直說這是一個ImportError。有關這裏發生了什麼的任何想法?我很困惑。

至於__init__.py文件導入模塊;這是一個遺留的代碼庫,我不確定那些改變的含義是什麼,除了測試會失敗。

編輯

今天早上我已經試過註釋掉那些進口的線條,但只是給了我的錯誤就下輸入:

[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推薦。

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

回答

3

與您的代碼似乎直接結構化,你不應該指向WSGIScriptAlias指令的Apache你app.py文件的方式。

你需要做的是創建一個單獨的WSGI腳本文件,WSGIScriptAlias使用,它具有:

from api.app import application 

您還需要配置的mod_wsgi從而使api目錄的父目錄是在Python模塊搜索路徑。你可以在mod_wsgi配置中完成,或者在新的WSGI腳本文件中完成。

假設你已經在爲api出現一個子目錄相同的目錄添加的WSGI腳本文件爲app.wsgi,它可以包括:

import os 
import sys 

sys.path.insert(0, os.path.dirname(__file__)) 

from api.app import application 
+0

謝謝......我誤以爲我並不需要一個WSGI腳本,現在起作用。 – JasTonAChair

+1

問題是,您正在通過路徑(它是Python包的一部分)到達代碼文件。因此,Python沒有意識到包的根源在哪裏。 –

相關問題