2017-10-05 10 views
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です私が逃したことや、問題を解決するためにできることは何ですか?

+0

私はあなたがのsys.pathを変更する前にvirtualenvを活性化しなければならないと言うだろうか、ジャンゴとapacheのため、このチュートリアルに従う

WSGIDaemonProcess myproject python-home=/home/sammy/myproject/myprojectenv python-path=/home/sammy/myproject 

としてはで説明しました何かをインポートする。 django.core.wsgiをインポートした分、virtualenvからではなくdjangoをインポートしました。 activateを実行すると(シェルスクリプトではない)、env変数を変更して、設定した変数を上書きします。だからあなたのwsgi.pyを並べ替えてみてください(文字通り逆です)。 – cowbert

+0

私はそれを完全に得る。それはまさにあなたが言ったことです。それは今働いている。回答として投稿できますか? – wondie

+2

http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.htmlを参照してください。これは、mod_wsgiで仮想環境を設定するための好ましい方法を示しています。 –

答えて

関連する問題