[解決済み] Gunicorn、'myproject'という名前のモジュールはありません。
質問
以前構築したウェブサイトを新しいサーバーにインストールしています。私はオリジナルの開発者ではありません。
過去にGunicorn + nginxを使ってアプリを生かしたことがあります(基本的には以下の通りです。 このチュートリアル に従います) が、ここで問題が発生しています。
I
source venv/bin/activate
であれば
./manage.py runserver 0.0.0.0:8000
はうまく機能し、すべてが期待通りに動作しています。それをシャットダウンして
gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
を実行すると、次のようになります。
[2016-09-13 01:11:47 +0000] [15259] [INFO] Starting gunicorn 19.6.0
[2016-09-13 01:11:47 +0000] [15259] [INFO] Listening at: http://0.0.0.0:8000 (15259)
[2016-09-13 01:11:47 +0000] [15259] [INFO] Using worker: sync
[2016-09-13 01:11:47 +0000] [15262] [INFO] Booting worker with pid: 15262
[2016-09-13 01:11:47 +0000] [15262] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker
worker.init_process()
File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/workers/base.py", line 126, in init_process
self.load_wsgi()
File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi
self.wsgi = self.app.wsgi()
File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/util.py", line 357, in import_app
__import__(module)
ImportError: No module named 'myproject.wsgi'
[2016-09-13 01:11:47 +0000] [15262] [INFO] Worker exiting (pid: 15262)
[2016-09-13 01:11:47 +0000] [15259] [INFO] Shutting down: Master
[2016-09-13 01:11:47 +0000] [15259] [INFO] Reason: Worker failed to boot.
アプリケーション全体の構造と関係があると思います。以前は、基本的な構造を持つアプリを作ったことがあります。
myproject
├── manage.py
├── myproject
│ ├── urls.py
│ ├── views.py
│ ├── component1
│ │ ├── urls.py
│ │ └── views.py
│ ├── component2
│ │ ├── urls.py
│ │ └── views.py
├── venv
│ ├── bin
│ └── ...
こちらは、代わりに、以下のような構造になっています。
myproject
├── apps
│ ├── blog
│ │ ├── urls.py
│ │ ├── views.py
│ │ └── ...
│ ├── catalogue
│ │ ├── urls.py
│ │ ├── views.py
│ │ └── ...
│ ├── checkout
│ │ ├── urls.py
│ │ ├── views.py
│ │ └── ...
│ ├── core
│ │ ├── urls.py
│ │ ├── views.py
│ │ └── ...
│ ├── customer
│ ├── dashboard
│ └── __init__.py
├── __init__.py
├── manage.py
├── project_static
│ ├── assets
│ ├── bower_components
│ └── js
├── public
│ ├── emails
│ ├── media
│ └── static
├── settings
│ ├── base.py
│ ├── dev.py
│ ├── __init__.py
│ ├── local.py
│ └── production.py
├── templates
│ ├── base.html
│ ├── basket
│ ├── blog
│ └── ....
├── urls.py
├── venv
│ ├── bin
│ ├── include
│ ├── lib
│ ├── pip-selfcheck.json
│ └── share
└── wsgi.py
つまり、gunicorn が探しているような、ショーを実行している 'main' モジュールはないということです。
何かご意見はありますか?
wsgi.py :
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
application = get_wsgi_application()
どのように解決するのですか?
あなたのエラーメッセージは
ImportError: No module named 'myproject.wsgi'
でアプリを実行しましたね。
gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
そして、wsgi.pyには、以下の行があります。
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
これが切断です。 プロジェクトを認識するために
myproject.wsgi
は
親
ディレクトリは Python のパス上になければなりません...。
cd .. && gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
とすれば、このエラーは解消されます。 しかし、その後、wsgi.py ファイルが
settings
の代わりに
myproject.settings
. これは、アプリが1つ上のディレクトリではなく、ルートディレクトリから実行されるように意図されていることを意味します。 絶対的なインポートを使用している場合、通常、次のように記述されていますか?
from myproject.app import ...
または
from app import ...
. もしこの推測が正しければ、正しいコマンドは
gunicorn --bind 0.0.0.0:8000 wsgi:application
もし、アプリが
myproject
を使用している場合は、正しく実行するためにPYTHONPATHを変更する必要があります。
PYTHONPATH=`pwd`/.. gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
関連
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?