2017-02-02 7 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

あなたは正しいです。私は各サイトごとに異なるデーモンを実行し、すべてが正常に実行されています。ありがとうございました! –

関連する問題