首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子域Django设置冲突

子域Django设置冲突
EN

Stack Overflow用户
提问于 2016-10-11 07:15:34
回答 1查看 103关注 0票数 0

我有一个有一组子域名的网站。当我访问其中一个子域(包括实际域)时,it 有时在浏览器上显示一个内部服务器错误,当我检查apache error.log时,它会告诉它抛出一个ImportError

代码语言:javascript
复制
    [Tue Oct 11 06:47:10.999837 2016] [:error] [pid 13114] [client 0.0.0.0:58735] mod_wsgi (pid=13114): Target WSGI script '/var/www/html/api.ai-labs.co/ai_labs_apps/wsgi.py' cannot be loaded as Python module.
    [Tue Oct 11 06:47:11.000377 2016] [:error] [pid 13114] [client 0.0.0.0:58735] mod_wsgi (pid=13114): Exception occurred processing WSGI script '/var/www/html/api.ai-labs.co/ai_labs_apps/wsgi.py'.
    [Tue Oct 11 06:47:11.000478 2016] [:error] [pid 13114] [client 0.0.0.0:58735] Traceback (most recent call last):
    [Tue Oct 11 06:47:11.000552 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/var/www/html/api.ai-labs.co/ai_labs_apps/wsgi.py", line 27, in <module>
    [Tue Oct 11 06:47:11.000675 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     application = get_wsgi_application()
    [Tue Oct 11 06:47:11.000737 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 13, in get_wsgi_application
    [Tue Oct 11 06:47:11.000853 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     django.setup()
    [Tue Oct 11 06:47:11.000913 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 17, in setup
    [Tue Oct 11 06:47:11.001017 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
    [Tue Oct 11 06:47:11.001076 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 55, in __getattr__
    [Tue Oct 11 06:47:11.001269 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     self._setup(name)
    [Tue Oct 11 06:47:11.001330 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 43, in _setup
    [Tue Oct 11 06:47:11.001395 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     self._wrapped = Settings(settings_module)
    [Tue Oct 11 06:47:11.001450 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 99, in __init__
    [Tue Oct 11 06:47:11.001526 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     mod = importlib.import_module(self.SETTINGS_MODULE)
    [Tue Oct 11 06:47:11.001581 2016] [:error] [pid 13114] [client 0.0.0.0:58735]   File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    [Tue Oct 11 06:47:11.001689 2016] [:error] [pid 13114] [client 0.0.0.0:58735]     __import__(name)
    [Tue Oct 11 06:47:11.001765 2016] [:error] [pid 13114] [client 0.0.0.0:58735] ImportError: No module named project.settings

我只会发布五个应用程序中的两个文件,因为我真的找不出错误,而且我很难部署到实际的服务器上

1应用程序: accounts

这是第一个应用程序的apache2/sites-available/accounts.ai-labs.conf

代码语言:javascript
复制
    <VirtualHost *:80>
            # The ServerName directive sets the request scheme, hostname and port that
            # the server uses to identify itself. This is used when creating
            # redirection URLs. In the context of virtual hosts, the ServerName
            # specifies what hostname must appear in the request's Host: header to
            # match this virtual host. For the default virtual host (this file) this
            # value is not decisive as it is used as a last resort host regardless.
            # However, you must set it for any further virtual host explicitly.
            ServerName accounts.ai-labs.co

            # ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html/accounts.ai-labs.co/project

            # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
            # error, crit, alert, emerg.
            # It is also possible to configure the loglevel for particular
            # modules, e.g.
            #LogLevel info ssl:warn

            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined

            # For most configuration files from conf-available/, which are
            # enabled or disabled at a global level, it is possible to
            # include a line for only one particular virtual host. For example the
            # following line enables the CGI configuration for this host only
            # after it has been globally disabled with "a2disconf".
            #Include conf-available/serve-cgi-bin.conf

            <Directory /var/www/html/accounts.ai-labs.co/project>
                    Options Indexes FollowSymLinks
                    AllowOverride All
                    Require all granted
            </Directory>

            Alias /static /var/www/html/accounts.ai-labs.co/project/static
            <Directory /var/www/html/accounts.ai-labs.co/project/static>
                    Require all granted
            </Directory>

            Alias /static /var/www/html/accounts.ai-labs.co/project/media
            <Directory /var/www/html/accounts.ai-labs.co/project/media>
                    Require all granted
            </Directory>

            <Directory /var/www/html/accounts.ai-labs.co/project/project>
                    <Files wsgi.py>
                            Require all granted
                    </Files>
            </Directory>

            WSGIScriptAlias / /var/www/html/accounts.ai-labs.co/project/project/wsgi.py

    </VirtualHost>

这是第一个应用程序的wsgi.py

代码语言:javascript
复制
"""
WSGI config for project project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/
"""

import os
import sys
import site

site.addsitedir('/var/www/html/accounts.ai-labs.co/lib/python2.7/site-packages')

sys.path.append('/var/www/html/accounts.ai-labs.co/project')
sys.path.append('/var/www/html/accounts.ai-labs.co/project/project')

from django.core.wsgi import get_wsgi_application
from django.conf import settings

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

activate_env=os.path.expanduser("/var/www/html/accounts.ai-labs.co/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))

application = get_wsgi_application()

2应用程序: blogs

这是第二个应用程序的apache2/sites-available/blogs.ai-labs.conf

代码语言:javascript
复制
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName blogs.ai-labs.co

        # ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/blogs.ai-labs.co

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

        <Directory /var/www/html/blogs.ai-labs.co>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>

        Alias /static /var/www/html/blogs.ai-labs.co/static
        <Directory /var/www/html/blogs.ai-labs.co/static>
                Require all granted
        </Directory>

        Alias /static /var/www/html/blogs.ai-labs.co/media
        <Directory /var/www/html/blogs.ai-labs.co/media>
                Require all granted
        </Directory>

        <Directory /var/www/html/blogs.ai-labs.co/ai_labs_blogs>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIScriptAlias / /var/www/html/blogs.ai-labs.co/ai_labs_blogs/wsgi.py

</VirtualHost>

这是第二个应用程序的wsgi.py

代码语言:javascript
复制
"""
WSGI config for ai_labs_blogs project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/
"""

import os
import sys
import site

site.addsitedir('/var/www/html/.virtualenvs_copy/ai-labs-website-pure-django/local/lib/python2.7/site-packages')

sys.path.append('/var/www/html/blogs.ai-labs.co')
sys.path.append('/var/www/html/blogs.ai-labs.co/ai_labs_blogs')

from django.core.wsgi import get_wsgi_application

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

activate_env=os.path.expanduser("/var/www/html/.virtualenvs_copy/ai-labs-website-pure-django/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))

application = get_wsgi_application()

我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-11 10:12:40

不要使用:

代码语言:javascript
复制
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")

用途:

代码语言:javascript
复制
os.environ["DJANGO_SETTINGS_MODULE"] = "project.settings"

同样,对于其他wsgi.py文件也是如此。

在不使用守护进程模式时,在mod_wsgi的Django文档中提到了这一点。您确实应该使用守护进程模式,这样每个应用程序都处于不同的进程中。您还可以清理如何使用虚拟环境。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39972134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档