Mod_wsgiをApacheでデプロイしてDjangoアプリケーションを実行しようとしていますが、エラー500内部サーバーエラーが発生しています。
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] mod_wsgi (pid=16142): Exception occurred processing WSGI script '/home/user/bms/Apache/Django.wsgi'.
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] Traceback (most recent call last):
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] File "/home/user/bms/Apache/Django.wsgi", line 13, in <module>
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] import Django.core.handlers.wsgi
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] ImportError: No module named Django.core.handlers.wsgi
私のApache仮想ホストは次のとおりです。
<VirtualHost *:80>
DocumentRoot /home/user/bms
<Directory /home/user/bms>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess bms user=user group=user processes=2 threads=25 python-path=/usr/local/lib/python2.7/site-packages
WSGIProcessGroup bms
WSGIScriptAlias / /home/user/bms/Apache/Django.wsgi
</VirtualHost>
そして、0777権限を持つ私のappディレクトリの参照されたwsgiファイル:
import os
import sys
path = '/home/user/bms'
if path not in sys.path:
sys.path.append(path)
os.environ['Django_SETTINGS_MODULE'] = 'bms.settings'
import Django.core.handlers.wsgi
application = Django.core.handlers.wsgi.WSGIHandler()
これは、Apacheユーザーが適切な権限を持っていないためかもしれないと聞きました。しかし、私はこれを修正する方法がわかりません。また、www-dataユーザーでデーモンを起動しようとしましたが、これで問題は解決しませんでした。
[〜#〜] edit [〜#〜]:
これを解決するには、仮想ホストファイルをデフォルトのファイルにコピーしてから、a2dissiteで古いファイルを無効にします。 「適切に」それを行う方法がわからないので、Apacheが目的の仮想ホストに移動します。
私にとって問題はwsgi pythonバージョンの不一致でした。 python 3を使用していました。
$ Sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ Sudo apt-get install libapache2-mod-wsgi-py3
@alxsからの警告コピー/貼り付け前これらのコマンド:
wsgiとApacheを使用するサーバー上で実行されているpython 2つのプロジェクトがある場合、上記のコマンドはそれらを効果的にシャットダウンします。
私にとっての問題は、WSGIスクリプトが実行可能でなかったことです。
Sudo chmod a+x Django.wsgi
あるいは単に
Sudo chmod u+x Django.wsgi
正しい所有者がいる限り
ログのこのエラーメッセージで同様の問題が発生しました。
ターゲットWSGIスクリプト「/home/web2py/wsgihandler.py」は、Python module。
解決策は、不正なWSGIPythonHomeディレクティブ(アプリケーションディレクトリを指す)を/etc/httpd/conf.d/wsgi.conf
RedHatでCentOSリポジトリを使用しています。
Graham Dumpletonのインストール/構成手順に従うことをお勧めします。 helloworldアプリケーションに対して構成をテストすると、mod_wsgi
は機能しており、構成に問題がありました。
ただし、エラーメッセージは、何が間違っていたかについてほとんど手がかりを与えませんでした。
私は同じ問題を抱えていましたが、最初はさらに下にスクロールして実際のエラーメッセージを確認できることに気付きませんでした。私の場合、それはインポートエラーでした:
ImportError: No module named bootstrap3
Pip(pip install Django-bootstrap3)を介してインストールした後、Apacheを再起動しました。
この質問はかなり古いことは知っていますが、たった今8時間ほどこれと格闘しました。 SELinuxが有効なシステムがあり、virtualenvを特定の場所に配置した場合、mod_wsgiは指定されたpython-path
をサイトパッケージに追加できません。また、エラーも発生しません。指定されたpython-path
をサイトパッケージに追加するために使用するメカニズムは、Python site
モジュール、特にsite.adduserdir()
であることが判明したためです。ディレクトリが存在しないかアクセスできない場合、このメソッドはエラーを発生させないため、mod_wsgiもエラーを発生させません。
とにかく、SELinuxをオフにしてみてください
Sudo setenforce 0
または、Apacheを実行しているプロセスがSELinuxとの適切なACLを持ち、virtualenvが存在するディレクトリにアクセスするようにします。
_wsgi.py
_にパスを追加するのが方向ですが、Django
を追加する代わりに、パスを追加するsys.path.append("/path/to/virtual/environment/lib/pythonX.X/site-packages")
が私のケースを修正しました。
これは、ubuntu 16.04でpython2.7を使用するDjangoプロジェクトの場合です。
XamppのWindowsでの私自身のケースでは、次のようにwsgi.pyファイルにアプリケーションパスを誤ってロードしていました。
Incorrect:
import sys
os.environ.setdefault("Django_SETTINGS_MODULE", "advisory_portal.settings")
application = get_wsgi_application()
sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
sys.path.append('C:/xampp/htdocs/advisory_portal')
の代わりに:
正しい:
import sys
sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
sys.path.append('C:/xampp/htdocs/advisory_portal')
os.environ.setdefault("Django_SETTINGS_MODULE", "advisory_portal.settings")
application = get_wsgi_application()
Sys python packageをインポートすることを忘れないでください
WSGIDaemonProcessオプションなしで試しましたか?
自宅でmod_wsgiをセットアップするのに問題はありませんでしたが、デーモンオプションなしでセットアップしました。仮想ホストファイルを移動して解決することについて言及しましたが、WSGIDaemonProcessのドキュメントでこの注意事項に注意してください。
また、デーモンプロセスグループの名前はサーバー全体で一意でなければならないことに注意してください。つまり、異なる仮想ホストで同じデーモンプロセスグループ名を使用することはできません。
それが偶然かどうかわからない。
私は同じ問題を抱えていて、それを使用して解決しました
Sudo easy_install cx_Oracle
ただし、easy_install
を使用してインストールする前にcx_Oracleをアンインストールすることを忘れないでください。
アンインストールするコマンド:pip uninstall cx_Oracle
これらのオプションの多くを試してみた後、最終的に私にとってうまくいった解決策は簡単でしたが、実際にどのパスを使用するかを理解するのに苦労したため、とらえどころのないものでした。
次のコマンドを使用して、Djangoに基づくメザニンプロジェクトを作成しました。ここにリストして、パスを明示します。
/var/www/mysite$ python3 -m venv ./venv
/var/www/mysite$ source ./venv/bin/activate
(venv) /var/www/mysite$ mezzanine-project mysite
(venv) /var/www/mysite$ cd mysite
(venv) /var/www/mysite/mysite$
さて、wsgi.pyファイルへのパスは次のとおりです。
/var/www/mysite/mysite/mysite/wsgi.py
/etc/Apache2/sites-available/mysite.conf
ファイル内でこのインストールで機能したディレクティブは次のとおりです。
...<VirtualHost...>
...
WSGIDaemonProcess mysite python-home=/var/www/mysite/venv python-path=/var/www/mysite/mysite
WSGIProcessGroup mysite
WSGIScriptAlias / /var/www/mysite/mysite/mysite/wsgi.py process-group=accounting
<Directory /var/www/mysite/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
...
</VirtualHost>...
Python-homeとpython-pathの多数のバージョンを試したところ、OPのエラーが繰り返し発生しました。ここで正しいパスを使用すると、wsgi.pyファイルにパスを追加することなく( mezzanine で提供され、 @ Dev's answer と同じことを達成し、私の場合)。
この質問が、この質問にタイトルを与えるエラーを引き起こす問題の解決策を収集するための一種のプールになったので、私もこれを追加したいと思います。
私の場合、Ubuntu 16.04.2でApacheとWSGIを使用してOpenStack Keystone(Ocata)を実行します。プロセスは開始されますが、キーストーンを照会するとすぐに
mod_wsgi (pid=20103): Target WSGI script '/opt/openstack/bin/keystone-wsgi-public' cannot be loaded as Python module.
2つの仮想ホストがあり、1つは
WSGIDaemonProcess keystone-public ...
WSGIProcessGroup keystone-public ...
もう一方は持っていた
WSGIDaemonProcess keystone-admin ...
WSGIProcessGroup keystone-admin ...
名前を変更して問題を解決しました。 vhostエントリは次のようになります。
WSGIDaemonProcess kst-pub ...
WSGIProcessGroup kst-pub ...
そして
WSGIDaemonProcess kst-adm ...
WSGIProcessGroup kst-adm ...
私はこれ以上調査しませんでした。私の作品として解決しました。
Apacheログエラー「wsgi.pyをPython module。としてロードできません。
Apacheを再起動するのではなく、停止してから起動する必要がありました。
プロジェクトのPython依存関係をvirtualenv内にインストールする場合、このvirtualenvのディレクトリへのパスをPythonパスにも追加する必要があります。これは、UNIXのようなシステムを使用する場合はコロン(:)で、Windowsを使用する場合はセミコロン(;)で区切られた複数のパスで、WSGIPythonPathディレクティブに追加のパスを追加します
リストに追加すると、これがどのように機能するかがわかります。
ソースからCentOS 7にCKAN 2.7.2をインストールしようとしましたが、このエラーが発生し続けました。私にとっては、SELinuxが有効になっていたからです。無効にする必要はありませんでした。代わりに、 https://www.endpoint.com/blog/2010/10/13/selinux-httpd-modwsgi-26-rhel-centos-5 を読んだ後、httpd_can_network_connectの有効化が修正されたことがわかりました。それ:
setsebool -P httpd_can_network_connect on
そのページから:
httpd_can_network_connect-データベースへのローカル接続を含め、httpdがネットワーク接続を確立できるようにします
このエラーが発生していました。 Apacheログでこれを見つけた仮想環境でpython 3を使用しています
[2018年12月21日08:01:43.471561 2018] [mpm_prefork:notice] [pid 21786] AH00163:Apache/2.4.6(Red Hat Enterprise Linux)mod_wsgi/3.4 Python/2.7.5の構成-通常の操作の再開
yum -y install mod_wsgi
を使用してwsgiをインストールしました。これにより、python 2用にコンパイルされたmod_wsgiがインストールされました。
yum remove mod_wsgi
python 3を使用してコンパイルされたmod_wsgiをインストールしました
yum install python35u-mod_wsgi
それはその後働いた