2017-02-02 27 views
0

我运行Django == 1.10.4网站与4种不同的语言。他们每个人都有自己的领域。他们中只有2或3人同时工作。Django populate()不可重入多语言设置与不同的域

这是后我杀了我的wsgi进程和访问页面首次出现的错误:

mod_wsgi (pid=8416): Target WSGI script '/var/www/user324/htdocs/ukmypagecom/app.wsgi' cannot be loaded as Python module. 
mod_wsgi (pid=8416): Exception occurred processing WSGI script '/var/www/user324/htdocs/ukmypagecom/app.wsgi'. 
Traceback (most recent call last): 
    File "/var/www/user324/htdocs/ukmypagecom/app.wsgi", line 11, in <module> 
    application = django.core.wsgi.get_wsgi_application() 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application 
    django.setup(set_prefix=False) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/__init__.py", line 27, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate 
    app_config.import_models(all_models) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/apps/config.py", line 199, in import_models 
    self.models_module = import_module(models_module_name) 
    File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/contrib/auth/models.py", line 4, in <module> 
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/contrib/auth/base_user.py", line 52, in <module> 
    class AbstractBaseUser(models.Model): 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/db/models/base.py", line 119, in __new__ 
    new_class.add_to_class('_meta', Options(meta, app_label)) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/db/models/base.py", line 316, in add_to_class 
    value.contribute_to_class(cls, name) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/db/models/options.py", line 214, in contribute_to_class 
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/db/__init__.py", line 33, in __getattr__ 
    return getattr(connections[DEFAULT_DB_ALIAS], item) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/db/utils.py", line 211, in __getitem__ 
    backend = load_backend(db['ENGINE']) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/db/utils.py", line 134, in load_backend 
    raise ImproperlyConfigured(error_msg) 
ImproperlyConfigured: 'django.contrib.gis.db.backends.mysql' isn't an available database backend. 
Try using 'django.db.backends.XXX', where XXX is one of: 
    'mysql', 'oracle', 'postgresql', 'sqlite3' 
Error was: cannot import name GEOSException 

每个页面重载我只得到这个错误后,一个或更多的是得到这个错误:

mod_wsgi (pid=8416): Target WSGI script '/var/www/user324/htdocs/ukmypagecom/app.wsgi' cannot be loaded as Python module. 
mod_wsgi (pid=8416): Exception occurred processing WSGI script '/var/www/user324/htdocs/ukmypagecom/app.wsgi'. 
Traceback (most recent call last): 
    File "/var/www/user324/htdocs/ukmypagecom/app.wsgi", line 11, in <module> 
    application = django.core.wsgi.get_wsgi_application() 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application 
    django.setup(set_prefix=False) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/__init__.py", line 27, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages/django/apps/registry.py", line 78, in populate 
    raise RuntimeError("populate() isn't reentrant") 
RuntimeError: populate() isn't reentrant 

这是我的设置文件如何查找每个域。

#settings_en.py 
from base_settings import * 

ALLOWED_HOSTS = ['127.0.0.1', '.example.com' ] 
LANGUAGE_CODE = 'en-GB' 
ROOT_URLCONF = 'myproject.base_urls' 
SITE_ID = 18 

#settings_pl.py 
from base_settings import * 

ALLOWED_HOSTS = ['127.0.0.1', '.example.com' ] 
LANGUAGE_CODE = 'pl-PL' 
ROOT_URLCONF = 'myproject.base_urls' 
SITE_ID = 19 

#settings_xx.py 
... 

这是我app.wsgi看起来像每个域

#english version 

#!/usr/bin/python 
import sys, os 

sys.path.insert(0, '/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages') #virtualenv 
sys.path.insert(0, '/var/www/user324/priv/mysourcecode') #sourcecode 

os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings_en' 

import django.core.wsgi 
application = django.core.wsgi.get_wsgi_application() 


#polish version 
#!/usr/bin/python 
import sys, os 

sys.path.insert(0, '/var/www/user324/priv/venv/myvenv/lib/python2.7/site-packages') 
sys.path.insert(0, '/var/www/user324/priv/mysourcecode') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings_pl' 

import django.core.wsgi 
application = django.core.wsgi.get_wsgi_application() 

任何想法是怎么回事错在这里?

重新启动我的wsgi进程后,有些域正在工作,有些无法正常工作。每个域都访问相同的源代码和相同的数据库。所以我认为源代码没有问题,因为那些直接运行的站点没有任何问题。

回答

0

这看起来不像Django问题,但mod_wsgi的配置错误 - 它看起来像您的应用程序可能运行在相同的解释器中并发生冲突。

你的Apache/mod_wsgi配置如何?特别感兴趣的是应该打开daemon mode,并且每个站点的守护进程都是分开的。 (See that directive's docs.

此外,我建议寻找服务与Apache/mod_wsgi以外的其他应用程序 - Nginx + uWSGI是我的首选武器。

+1

你说得对。我为每个站点运行一个不同的守护进程,一切都运行良好。谢谢! –