質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Gunicorn

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Q&A

解決済

1回答

4837閲覧

gunicorn.serviceを開始するとModuleNotFoundErrorになる

usabear

総合スコア1

Gunicorn

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

0グッド

0クリップ

投稿2021/10/02 07:43

編集2021/10/02 07:52

前提・実現したいこと

Djangoで作成したWebアプリをAWS上でデプロイしようとしています。
gunicorn.serviceを起動するとModuleNotFoundErrorとなりサービスを開始できません。

AWS環境 "Amazon Linux 2"
NginxとGunicornを使用しています。

gunicorn --bind 0.0.0.0:8000 myproject.wsgi
は問題なく実行できます。

socketファイル(gunicorn.socket)とserviceファイル(gunicorn.service)を作成し
sudo systemctl start gunicorn.service
を実行するとエラーになります。

発生している問題・エラーメッセージ

sudo systemctl status gunicorn.serviceで確認すると次のようになります。

● gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since 土 2021-10-02 15:29:47 JST; 34min ago Process: 6776 ExecStart=/home/puser/myp/env/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/puser/myp/myproject/myproject.sock myproject.wsgi:application (code=exited, status=3) Main PID: 6776 (code=exited, status=3) 10月 02 15:29:47 ha-sample-web gunicorn[6776]: File "<frozen importlib._bootstrap>", line 1006, in _gcd_import 10月 02 15:29:47 ha-sample-web gunicorn[6776]: File "<frozen importlib._bootstrap>", line 983, in _find_and_load 10月 02 15:29:47 ha-sample-web gunicorn[6776]: File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked 10月 02 15:29:47 ha-sample-web gunicorn[6776]: ModuleNotFoundError: No module named 'myproject' 10月 02 15:29:47 ha-sample-web gunicorn[6776]: [2021-10-02 15:29:47 +0900] [6779] [INFO] Worker exiting (pid: 6779) 10月 02 15:29:47 ha-sample-web gunicorn[6776]: [2021-10-02 15:29:47 +0900] [6776] [INFO] Shutting down: Master 10月 02 15:29:47 ha-sample-web gunicorn[6776]: [2021-10-02 15:29:47 +0900] [6776] [INFO] Reason: Worker failed to boot. 10月 02 15:29:47 ha-sample-web systemd[1]: gunicorn.service: main process exited, code=exited, status=3/NOTIMPLEMENTED 10月 02 15:29:47 ha-sample-web systemd[1]: Unit gunicorn.service entered failed state. 10月 02 15:29:47 ha-sample-web systemd[1]: gunicorn.service failed.

/etc/systemd/system/gunicorn.socket

[Unit] Description = gunicorn socket [Socket] #ListenStream=/run/gunicorn.sock ListenStream=/home/puser/myp/myproject/myproject.sock [Install] WantedBy=sockets.target

/etc/systemd/system/gunicorn.service

[Unit] Description=gunicorn daemon Requires=gunicorn.socket After=network.target [Service] User=puser Group=pgroup WorkingDirectory=/home/puser/myp/myproject ExecStart=/home/puser/myp/env/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/puser/myp/myproject/myproject.sock myproject.wsgi:application [Install] WantedBy=multi-user.target

試したこと

socketファイルのListenStreamの設定を
ListenStream=/run/gunicorn.sock
として、
serviceファイルのExecStartの設定を
ExecStart=/home/puser/myp/env/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock myproject.wsgi:application

としてみても、エラーになりました。

補足情報(FW/ツールのバージョンなど)

Python==3.7.10
Django==3.2
gunicorn==20.1.0
nginx/1.20.1

Djangoのファイルはgit cloneで持ってきました。
DBのmigrateは終わっています。
python3 manage.py runserverも起動できます。
/home/puser/myp/myproject にmanage.pyがあります。

仮想環境は
/home/puser/myp/env/に作成しています。

sudo systemctl start gunicorn.socketは問題なく実行でき
sockファイルが作成されました。

なぜgunicorn.serviceを開始できないのでしょうか。
いろいろWebで検索もしましたが、原因が全く分かりません。
お力添えをお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

djangoは使ったことがないので知りませんが、「myproject.wsgi」が「/home/puser/myp/myproject/wsgi.py」にあるとすれば、「myproject/wsgi.py」が「モジュールとして読むべきパス(importで読むべきパス)」にないからでしょう。

  • WorkingDirectory」を「/home/puser/myp」にする。
  • gunicornのオプションに、「--pythonpath /home/puser/myp」を追加する。
  • モジュール(「myproject.wsgi」)を「wsgi」に変更する。

のいずれかで対処できると思います。

投稿2021/10/03 05:44

katsuko

総合スコア3464

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

usabear

2021/10/04 00:08 編集

ありがとうございます! gunicornのオプションに、pythonpathを追加したら解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問