4

コードを変更しなくても、私の django アプリは WSGI スクリプトの読み込み中に例外をスローし始めました。私はpython 2.7でdjango 1.3を使用していますが、トップレベル.wsgiは基本的にデフォルトから変更されていません:

import os
import sys

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'api.settings'
application = WSGIHandler()

Apache によって報告されているように、どのリクエストでもこれらのエラーが発生し始めました。

mod_wsgi (pid=3283): Target WSGI script '/home/beder/webapps/api/api.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=3283): Exception occurred processing WSGI script '/home/beder/webapps/api/api.wsgi'.
Traceback (most recent call last):
  File "/home/beder/webapps/api/api.wsgi", line 4, in <module>
    from django.core.handlers.wsgi import WSGIHandler
  File "/home/beder/webapps/api/lib/python2.7/django/core/handlers/wsgi.py", line 10, in <module>
    from django import http
  File "/home/beder/webapps/api/lib/python2.7/django/http/__init__.py", line 122, in <module>
    from django.utils.http import cookie_date
  File "/home/beder/webapps/api/lib/python2.7/django/utils/http.py", line 7, in <module>
    from email.Utils import formatdate
  File "/usr/local/lib/python2.7/email/__init__.py", line 79, in __getattr__
    __import__(self.__name__)
  File "/usr/local/lib/python2.7/email/utils.py", line 27, in <module>
    import random
  File "/usr/local/lib/python2.7/random.py", line 47, in <module>
    from os import urandom as _urandom
ImportError: cannot import name urandom

サーバーを再起動したところ、正常に動作するようになりました (エラーなし)。どうしたらいいのか途方に暮れています - これが二度と起こらないようにしたいのですが、今は起こっていません。なぜそのインポートエラーが表示されたのかわかりません。

4

3 に答える 3

3

virtualenv 内で Django を実行していますか? システムを更新またはアップグレードしましたか? その場合、たとえば Python 2.6 から Python 2.7 にアップグレードした場合は、virtualenv を再生成する必要があります。

$ virtualenv [your-options] [your-django-project-directory]

于 2012-05-27T20:53:42.040 に答える
2

Jesse や私のような webfaction を使用して Django アプリを実行しているが、virtualenv を使用していない場合、アップグレード後に webapp のカスタム Apache インストールが再起動されないことがあります。これは、stdlib が変更されたことを意味しますが、apache はメモリにロードされたバージョンであるため、引き続き python 2.7.2 を使用します。

この場合の解決策は簡単です。ssh 経由でアカウントにログインし、次を実行します。

[username@webXX ~]$ ~/webapps/<webapp-name>/apache2/bin/restart

これにより、Web サーバーが再起動され、apache が新しいインタープリター バイナリをリロードします。

于 2012-06-13T07:03:20.060 に答える
0

ソースからビルドして Python 2.6.5 を 2.6.8 に更新したときにも、同じエラーが見つかりました。また、ソースから mod_wsgi をビルドしましたが、最初に新しいバージョンの Python 用に mod_wsgi を再コンパイルするのを忘れていたため、urandom に関する同じエラーが発生しました。

于 2013-05-07T08:51:01.007 に答える