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モジュールをインポートするファイルについては; これは従来のコード ベースであり、テストが失敗することを除けば、それを変更することの意味はまだわかりません。

編集

今朝、これらのインポート行をコメントアウトしようとしましたが、次のインポートでエラーが発生するだけです:

[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

この記事で推奨されていることも実行しました。

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

1 に答える 1

3

WSGIScriptAliasコードが構造化されているように見える方法では、Apache のディレクティブをapp.pyファイルに直接向けるべきではありません。

あなたがする必要があるのは、別の WSGI スクリプト ファイルを作成して使用するWSGIScriptAliasことです。

from api.app import application

apiまた、ディレクトリの親ディレクトリがPython モジュールの検索パスにあるように mod_wsgi を構成する必要があります。mod_wsgi 構成で行うか、この新しい WSGI スクリプト ファイルで行うことができます。

サブディレクトリとして表示されるapp.wsgiのと同じディレクトリにWSGI スクリプト ファイルを追加したと仮定すると、次のものが含まれる可能性があります。api

import os
import sys

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

from api.app import application
于 2016-11-30T22:33:28.220 に答える