0
私はUbuntuでdjango 1.11を使用していますが、非仮想のpythonは1.6です。 1.6を使っている他のアプリがあります。アプリケーションをApache mod_wsgiで実行すると、1.11の代わりに1.6が使用され、スタックトレースが取得されます。djangoはvirutalenvでdjangoのバージョンを使用できません
Apacheのconfに:
WSGIPythonPath /home/wondi/envs/my_app
<VirtualHost *:80>
ServerName server.com
ServerAdmin [email protected]
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
WSGIDaemonProcess server.com processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup server.com
WSGIPassAuthorization On
WSGIScriptAlias /my_app /home/wondi/envs/my_app/my_app/wsgi.py
<Directory "/home/wondi/envs/my_app/my_app/">
<Files wsgi.py>
Order deny,allow
Require all granted
</Files>
</Directory>
<Directory /home/wondi/envs/my_app/app/static/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
IndexOptions FancyIndexing
</Directory>
...
</VirtualHost>
MY_APPの\のwsgi.py:
import os
import sys
from django.core.wsgi import get_wsgi_application
import site
env_path = '/home/wondi/envs/lib/python2.7/site-packages'
# we add currently directory to path and change to it
working_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(working_dir)
sys.path = [working_dir] + sys.path
# Append paths
site.addsitedir(env_path)
sys.path.append('/home/wondi/envs/')
sys.path.append('/home/wondi/envs/my_app/')
os.environ["DJANGO_SETTINGS_MODULE"] = "my_app.settings"
activate_this = "/home/wondi/envs/bin/activate_this.py"
execfile(activate_this, dict(__file__=activate_this))
application = get_wsgi_application()
スタックトレース:
Django Version: 1.6.1
Python Version: 2.7.6
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.gis',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework_gis',
'corsheaders',
'my_app']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
99. resolver_match = resolver.resolve(request.path_info)
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve
337. for pattern in self.url_patterns:
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in url_patterns
365. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in urlconf_module
360. self._urlconf_module = import_module(self.urlconf_name)
File "/usr/lib/python2.7/dist-packages/django/utils/importlib.py" in import_module
40. __import__(name)
File "/home/wondi/envs/my_app/my_app/urls.py" in <module>
19. from rest_framework.urlpatterns import format_suffix_patterns
File "/home/wondi/envs/lib/python2.7/site-packages/rest_framework/urlpatterns.py" in <module>
5. from rest_framework.compat import RegexURLResolver, include
File "/home/wondi/envs/lib/python2.7/site-packages/rest_framework/compat.py" in <module>
12. from django.apps import apps
Exception Type: ImportError at/
Exception Value: No module named apps
がTHERです私が逃したことや、問題を解決するためにできることは何ですか?
私はあなたがのsys.pathを変更する前にvirtualenvを活性化しなければならないと言うだろうか、ジャンゴとapacheのため、このチュートリアルに従う
:
としてはで説明しました何かをインポートする。 django.core.wsgiをインポートした分、virtualenvからではなくdjangoをインポートしました。 activateを実行すると(シェルスクリプトではない)、env変数を変更して、設定した変数を上書きします。だからあなたのwsgi.pyを並べ替えてみてください(文字通り逆です)。 – cowbert
私はそれを完全に得る。それはまさにあなたが言ったことです。それは今働いている。回答として投稿できますか? – wondie
http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.htmlを参照してください。これは、mod_wsgiで仮想環境を設定するための好ましい方法を示しています。 –