У меня раньше была эта проблема, но я только что развернул новый сайт на совершенно другом сервере, и у меня возникла та же проблема.Используя Chromium, если я просматриваю сайт, он иногда просто зависает.Chromium сделал запрос к серверу и просто сидит в ожидании ответа.Так будет в течение минуты или пока я не нажму на кнопку остановки и попытаюсь снова.Иногда это также зависает от ответа - блесна в хроме меняет направление, страница становится белой, но больше ничего не происходит.
Чтобы это произошло, обычно мне просто нужно посетить несколько страниц подряд.Я обычно вижу это после просмотра примерно 10 страниц.'top' на сервере показывает, что ничего не происходит (python / wsgi не выполняется), так что это не проблема перегрузки сервера.Ничего в журнале доступа для попадания (т.е. он не регистрируется) и ничего в журнале ошибок тоже.
Я в тупике.Пожалуйста, кто-нибудь может указать мне, как я могу отладить это.Я не могу выпустить сайт, который работает так, как в данный момент: - (
Спасибо
Файлы конфигурации имеют следующий формат:
apache conf file:
<VirtualHost *:80>
ServerName mysite.org
ServerAlias www.mysite.* demo.mysite.org
# Rewrite rules to add 'www.' if it's not present
RewriteEngine On
RewriteCond %{HTTP_HOST} !(www|demo)\.mysite.org
RewriteRule ^(.*)$ http://www.mysite.org$1 [R=301,L]
WSGIDaemonProcess mycms processes=5 threads=5 display-name=%{GROUP} \
user=nobody group=nobody
WSGIScriptAlias / /var/www/python/mycms/mycms/conf/apache/mycms.wsgi \
process-group=mycms application-group=%{GLOBAL}
<Directory /var/www/python/mycms/mycms/conf/apache/>
WSGIProcessGroup mycms
Order deny,allow
Allow from all
</Directory>
Alias /media/admin/ /var/www/python/mycms/venv/lib/python2.7/site-packages/Django-1.2.5-py2.7.egg/django/contrib/admin/media/
<Directory /var/www/python/mycms/venv/lib/python2.7/site-packages/Django-1.2.5-py2.7.egg/django/contrib/admin/media>
Order deny,allow
Allow from all
Options +FollowSymLinks
</Directory>
Alias /media/ /var/www/python/mycms/mycms/media/
<Directory /var/www/python/mycms/mycms/media>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
wsgi:
import os
import sys
root = os.path.join(os.path.dirname(__file__), '../../..')
sys.path.insert(0, root)
activate_this = os.path.join(root, 'venv/bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
os.environ['PYTHON_EGG_CACHE'] = '/tmp/python-eggs'
os.environ['DJANGO_SETTINGS_MODULE'] = 'mycms.settings_production'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
(частично) settings.py:
import os
# Django settings for mycms project.
gettext = lambda s: s
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'mycms', # Or path to database file if using sqlite3.
'USER': 'user', # Not used with sqlite3.
'PASSWORD': 'pass', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
SITE_ID = 1
# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = '/media/'
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/media/admin/'
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'mycms.app.middleware.SiteDetectionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.multilingual.MultilingualURLMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.media.PlaceholderMediaMiddleware',
)
ROOT_URLCONF = 'mycms.urls'
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'django.contrib.sitemaps',
'cms',
'cms.plugins.text',
'cms.plugins.picture',
'cms.plugins.link',
'cms.plugins.file',
'cms.plugins.teaser',
'cms.plugins.googlemap',
'appmedia',
'mptt',
'publisher',
'menus',
'cmsplugin_contact',
'mycms.app.html-sitemap',
'mycms.app.siteprofile',
'haystack',
'cms_search',
'cms_search.search_helpers',
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.i18n",
"django.core.context_processors.request",
"django.core.context_processors.media",
"mycms.app.context_processors.multisite",
"cms.context_processors.media",
)
SiteDetectionMiddleware (отключение этого не решает проблему, хотя). Я используюэто потому, что я хочу обслуживать, скажем, 50 сайтов из одной установки django и иметь пул рабочих, которые могут обслуживать все сайты. Наличие одного wsgi на сайт будет предварительно распределять ресурсы, но не позволит никакой гибкости перераспределить их между сайтами, когда некоторыезанятее других:
from django.contrib.sites.models import Site
from django.conf import settings
from django.http import HttpResponseServerError
from mycms.app.siteprofile.models import *
class SiteDetectionMiddleware:
"""
Sets the SITE_ID depending on the current HTTP host name.
This allows multiple sites with identical settings to be run
easily.
"""
def process_request(self, request):
host = request.META.get('HTTP_HOST')
if host:
try:
site = Site.objects.get(domain=host)
settings.SITE_ID = site.id
profile = Profile.objects.get(site=site)
settings.CMS_TEMPLATES = profile.get_template_tuples() + \
(settings.CMS_TEMPLATES[len(settings.CMS_TEMPLATES) - 1],)
except Site.DoesNotExist:
return HttpResponseServerError()
except Profile.DoesNotExist:
pass