1. cbx

    08.02.2009

    0 ↑
    0 ↓
    Решил запустить приложение под Apache 2.2 и mod_wsgi. Всё запустилось, но мне не совсем понятны возможные варианты размещения директорий и путей.

    apache-vhosts.conf:
    <VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName www.example.com
    ErrorLog "/home/trafstat/www/logs/error.log"
    CustomLog "/home/trafstat/www/logs/access.log" common

    Alias "/media/" "/usr/local/lib/python2.5/site-packages/django/contrib/admin/media/"
    <Directory "/usr/local/lib/python2.5/site-packages/django/contrib/admin/media">
    Order allow,deny
    Allow from all
    </Directory>

    Alias "/static/" "/home/trafstat/www/scripts/trafstat/static/"
    <Directory "/home/trafstat/www/scripts/trafstat/static">
    Order allow,deny
    Allow from all
    </Directory>

    WSGIScriptAlias "/" "/home/trafstat/www/htdocs/wsgi/trafstat.wsgi"
    <Directory "/home/trafstat/www/htdocs/wsgi">
    Order allow,deny
    Allow from all
    </Directory>

    # DocumentRoot "/home/trafstat/www/htdocs"
    # <Directory "/home/trafstat/www/htdocs">
    # Order allow,deny
    # Allow from all
    # </Directory>

    </VirtualHost>
    trafstat.wsgi:
    import os, sys

    projpath = "/home/trafstat/www/scripts"

    if projpath not in sys.path:
    sys.path.append(projpath)

    os.environ['DJANGO_SETTINGS_MODULE'] = 'trafstat.settings'

    from django.core.handlers.wsgi import WSGIHandler

    application = WSGIHandler()
    Файлы проекта у меня лежат /home/trafstat/www/scripts/trafstat и пути импорта включают имя проекта. Однако под встроенным джанговским сервером в операторах импорта работает даже импорт без указания имени проекта (например в INSTALLED_APPS я могу писать как trafstat.appname, так и просто appname).

    Вопросы:
    1. В каких случаях один wsgi-обработчик может обслуживать несколько проектов чтобы потребовалось явное указание их имён в операторах импорта? Иначе говоря, для чего в sys.path нужно указывать родительскую директорию проекта а не сам проект? Правильно ли я понял, что development-сервер добавляет в PYTHONPATH не только родительскую директорию но и сам проект?

    2. Как принято раздавать статический контент админки?
  2. В каких случаях один wsgi-обработчик может обслуживать несколько проектов чтобы потребовалось явное указание их имён в операторах импорта?

    Имя проекта не требуется. Более того, использование имени проекта при импорте модулей по сути является ошибкой. Не надо использовать его, т.к. это повышает связность, и преимуществ не дает.

    Иначе говоря, для чего в sys.path нужно указывать родительскую директорию проекта а не сам проект?

    Потому что вы на это имя завязались, но вовсе не обязательно. И вообще все пляски с sys.path можно доверить самой джанге, используя setup_environ.

    Правильно ли я понял, что development-сервер добавляет в PYTHONPATH не только родительскую директорию но и сам проект?

    Там используется как раз setup_environ, который на время добавляет родительскую директорию, импортирует проект, потом удаляет директорию из sys.path. Саму директорию проекта добавлять смысла нет, т.к. она добавляется интерпретатором как текущая для скрипта (manage.py)

    Как принято раздавать статический контент админки?

    Так же как и любую другую статику.

  3. cbx

    08.02.2009

    0 ↑
    0 ↓
    Почему тогда в стандартном туториале http://docs.djangoproject.com/en/dev/intro/tutorial01/ при каждом импорте указывается имя проекта mysite?

    Не для избежания ли возможных конфликтов импорта того же settings.py в случае когда в путь импорта по той или иной причине попадёт несколько таких проектов?
  4. Иван Сагалаев

    08.02.2009

    0 ↑
    0 ↓

    Официальное объяснение — чтобы не вводить в тьюториале еще одну концепцию, а сделать "попроще". Но Все Знают™, что это плохо.

  5. cbx

    08.02.2009

    0 ↑
    0 ↓
    Кажется я понял - так приложения получаются отвязанными от проекта и могут распространяться отдельно и встраиваться куда угодно.
  6. Не для избежания ли возможных конфликтов импорта того же settings.py в случае когда в путь импорта по той или иной причине попадёт несколько таких проектов?

    Директория проекта, всегда первая в sys.path, следовательно при поиске модуля в неё интерпретатор заглянет первой.

    Кажется я понял - так приложения получаются отвязанными от проекта и могут распространяться отдельно и встраиваться куда угодно.

    Бинго!:-)

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.