1

У меня есть ImportError после развертывания на эластичном бобовом стебле. Мы используем Falcon для создания API. Я успешно использовал EB CLI для инициализации приложения, создания среды и развертывания моего кода. Мы используем Python 2.7 (на данный момент).ImportError - разверните приложение Falcon для AWS Elastic Beanstalk

Сайт AWS EB для приложения/окружающей среды говорит, что все шло хорошо, но когда я отправить запрос на апи, журналы показывают эту ошибку:

[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/ 
    -__init__.py #import app 
    -app.py 
    -middlewares/ 
     -__init__.py #import require_json 
     -require_json.py 

Line 12 из моего app.py файла:

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 ,

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.

Предположив вы добавили файл WSGI сценарий, как app.wsgi в том же каталоге, api выглядит как подкаталог, он может включать в себя:

import os 
import sys 

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

from api.app import application 
+0

Спасибо ... Я ошибочно думал, что я не нужен WSGI скрипт, это работает сейчас. – JasTonAChair

+1

Проблема в том, что вы попали в файл кода по пути, который был частью пакета Python. Из-за этого у Python не было смысла, где был корень для пакета. –

 Смежные вопросы

  • Нет связанных вопросов^_^