временная проблема с двумя приложениями django на одном виртуальном хосте - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть два приложения Django (appsystem и testapp), работающие в отдельных папках, которые включены в один и тот же параметр виртуального хоста apache (см. Файл conf в конце).

Одно приложение отображает страницу в корне домена, и кажется, что оно всегда работает нормально, но когда я перехожу по URL, который должен перейти ко второму приложению, в первый раз происходит сбой, когда он жалуется, что может 'не могу найти таблицу базы данных, несмотря на то, что я вижу на странице отладки, которая загружает правильные настройки.

Если я обновляю страницу, то она (testapp) работает нормально и продолжается до тех пор, пока я не вернусь на страницуиз приложения.Если я сделаю это и вернусь к testapp, я должен затем обновить страницу.

Оба приложения используют sqlite для аутентификации, но удаление ссылок аутентификации и sqlite из файла настроек для appsystem, похоже, не имеет значения.

Причина, по которой я это сделал, заключается в том, что идея заключается в том, что приложение, отображающее корневую страницу (и некоторые страницы администратора с уникальными URL-адресами), перечислит другое установленное приложение django и отобразит ссылки на него.нажмите на.

Я также подозреваю, что это может быть связано с сеансом, потому что я могу перейти непосредственно к testapp в другом браузере, и он отлично работает даже в первом случае.Из-за этого я дал каждому приложению django свое собственное значение для SESSION_COOKIE_NAME, но это, похоже, не помогло.

Кто-нибудь знает, в чем может быть проблема?

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /app_www_root

    RewriteEngine On
        # the root of the box should show the system index - a list of installed apps
        RewriteRule ^/$ /appsystem/system_index/ [PT]

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /app_www_root/>
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

    Include /etc/apache2/installed-apps/

    ## this is what gets pulled in by the include ##
    Alias                 /testapp/static       /testapp/static
    Alias                 /testapp/logs         /var/log/testapp
    WSGIScriptAliasMatch  ^/testapp             /testapp/django.wsgi

    <Directory "/testapp">
        Order allow,deny
        Allow from all
    </Directory>

    <Directory "/var/log/testapp">
        Order allow,deny
        Allow from all
    </Directory>

    <Location "/testapp/logs">
        SetHandler none
        Options +Indexes
    </Location>

    <Location "/testappl/static">
        SetHandler none
        Options -Indexes
        Options +Includes
        AddOutputFilter INCLUDES .html
    </Location>
    ## end of included file ##

  # wsgi docs advise against trailing slash below
  WSGIScriptAlias /appsystem  /app_sys/django.wsgi

</VirtualHost>

Ответы [ 3 ]

1 голос
/ 20 сентября 2011

Попробуйте запустить их в virtualenv с помощью modwsgi.

1 голос
/ 21 сентября 2011

FWIW, у вас разные проблемы с вашей конфигурацией.

  1. Почему вы вообще используете директиву WSGIScriptAliasMatch?Вы должны просто заменить его на WSGIScriptAlias.Не используйте WSGIScriptAliasMatch правильно, и это может привести к неправильному разрешению URL.

  2. Использование 'SetHandler none' не требуется.Это то, что вам, возможно, нужно было сделать для mod_python, но не для mod_wsgi.

  3. Использование блока директив Location для применения директив к статическим файловым ресурсам, как вы, является плохой практикой.Вместо этого вы должны применять их к определенным каталогам, используя директиву Directory.

Как отмечают другие, вам лучше использовать режим демона.Если это сработало, но вы делегировали оба приложения одному и тому же процессу в режиме одного демона, то у вас может возникнуть проблема с несколькими процессами, т. Е. Ваше приложение не может обрабатывать запуск в нескольких процессах одновременно.Если вы делегировали каждый из них в свою собственную группу процессов-демонов, то у вас могут возникнуть проблемы с запуском их в одном и том же процессе, даже если они выполняются в отдельных подчиненных интерпретаторах.

1 голос
/ 20 сентября 2011

Читали ли вы http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango вообще?

Я подозреваю, что ваша проблема будет решена, если вы используете mod_wsgi в режиме демона (то есть через WSGIDaemonProcess).

...