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

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

ただいまの
回答率

90.74%

  • Python

    6806questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Apache

    1709questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • Django

    900questions

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

  • WSGI

    22questions

【Djangoデプロイ】wsgi.pyのimport error

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,025
退会済みユーザー

退会済みユーザー

前提・実現したいこと

現在制作したDjangoアプリの初めてのデプロイ作業中です。
環境は下記の通りです。

さくらVPS
centos7
Apache/2.4.6
mod_wsgi
MySQL5.7.19
PyMySQL0.7.9
Django 1.11
python 3.6.2

関連ファイルは下記の通りです。

/etc/httpd/conf.d/python.conf

LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias / /var/www/cgi-bin/mysite/mysite/wsgi.py

<Directory /var/www/cgi-bin/mysite/mysite>
Order deny,allow
Allow from all
</Directory>
#/cgi-bin/mysite/mysite/wsgi.py

import os
import site
import sys
import pymysql

pymysql.install_as_MySQLdb()

site.addsitedir("/usr/lib/python3.6/site-packages")

sys.path.append('/var/www/cgi-bin/lib/python3.6/site-packages')
sys.path.append('/var/www/cgi-bin/mysite')
sys.path.append('/var/www/cgi-bin/mysite/mysite')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

activate_env = os.path.expanduser("/var/www/cgi-bin/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))


from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

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

ローカル環境ではsqlite3を使っていたのですが、本番環境ではMySQLに変更しました。
python manage.py migrateでDBに反映させるところまではできたのですが、ブラウザを確認してみるとInternal Server Errorが。。
logを確認したところ、下記のメッセージが出ておりました。

#error_log

[Fri Sep 29 19:04:10.964582 2017] [:error] [pid 982] [client 175.41.103.183:49888] mod_wsgi (pid=982): Target WSGI script '/var/www/cgi-bin/mysite/mysite/wsgi.py' cannot be loaded as Python module.
[Fri Sep 29 19:04:10.964625 2017] [:error] [pid 982] [client 175.41.103.183:49888] mod_wsgi (pid=982): Exception occurred processing WSGI script '/var/www/cgi-bin/mysite/mysite/wsgi.py'.
[Fri Sep 29 19:04:10.964642 2017] [:error] [pid 982] [client 175.41.103.183:49888] Traceback (most recent call last):
[Fri Sep 29 19:04:10.964661 2017] [:error] [pid 982] [client 175.41.103.183:49888]   File "/var/www/cgi-bin/mysite/mysite/wsgi.py", line 12, in <module>
[Fri Sep 29 19:04:10.964711 2017] [:error] [pid 982] [client 175.41.103.183:49888]     import pymysql
[Fri Sep 29 19:04:10.964739 2017] [:error] [pid 982] [client 175.41.103.183:49888] ImportError: No module named pymysql
[Fri Sep 29 19:15:42.140527 2017] [:error] [pid 979] [client 175.41.103.183:49993] mod_wsgi (pid=979): Target WSGI script '/var/www/cgi-bin/mysite/mysite/wsgi.py' cannot be loaded as Python module.
[Fri Sep 29 19:15:42.140571 2017] [:error] [pid 979] [client 175.41.103.183:49993] mod_wsgi (pid=979): Exception occurred processing WSGI script '/var/www/cgi-bin/mysite/mysite/wsgi.py'.
[Fri Sep 29 19:15:42.140598 2017] [:error] [pid 979] [client 175.41.103.183:49993] Traceback (most recent call last):
[Fri Sep 29 19:15:42.140619 2017] [:error] [pid 979] [client 175.41.103.183:49993]   File "/var/www/cgi-bin/mysite/mysite/wsgi.py", line 12, in <module>
[Fri Sep 29 19:15:42.140671 2017] [:error] [pid 979] [client 175.41.103.183:49993]     import pymysql
[Fri Sep 29 19:15:42.140687 2017] [:error] [pid 979] [client 175.41.103.183:49993] ImportError: No module named pymysql


このエラーは非常に晴天の霹靂でした。というのも、
一つ上の階層にあるmanage.py(/cgi-bin/mysite/manage.py)においても同じようにpymysqlをインポートするのですが、そちらは正常に動いていたからです。(なのでmigrateも上手くいったのだと思います。)
またshellからimport pymysqlを試してみても正常にインポートできるので、インストールが上手くいっていないということは無いと思います。

色々と調べてはいるのですが答えが出そうもないのでこちらにて投稿させて頂きました。
何卒ご教示のほど宜しくお願い致します。

追記

#manage.py

#!/usr/bin/env python
import os
import sys
import pymysql

pymysql.install_as_MySQLdb()

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • acre_maker

    2017/09/30 11:50

    確認になりますがsettings.pyの中でデータベースの指定をmySQLに変えていますか?

    キャンセル

  • miyahan

    2017/09/30 23:33

    差し支えなければ、manage.py も載せてもらえますか?

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/10/01 14:52

    acre_maker様:データベースの指定はもう変えておりますので、そこが原因ではないようです。。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/10/01 14:53

    miyahan様:manage.py追記しました。ほとんどデフォルトのままです。【import pymysql】が追加されております。

    キャンセル

回答 1

checkベストアンサー

+1

virtualenv を使っているならば、Apacheの設定にそのパスを指定してあげてください。

LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /path/to/.virtualenvs/v3.6.1 # ←これ
WSGIScriptAlias / /var/www/cgi-bin/mysite/mysite/wsgi.py

参考:virtualenv + flask + apache + wsgi で動かすまで - Qiita

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/02 23:26

    apacheの方は何も指定してあげてなかったですね。。。
    解決しました!
    有難うございます。

    キャンセル

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

  • ただいまの回答率 90.74%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    6806questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Apache

    1709questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • Django

    900questions

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

  • WSGI

    22questions