2009-11-24 2 views
4

У меня есть сервер, на котором у меня есть два сайта, построенные с помощью Django и Python, один сайт - это основной сайт с более старой версией django, другой с более новой версией, я обновился до новой версии и основных аспектов мой другой сайт сломался, можно ли сказать сайту использовать другую версию, скажем, путь python? в виртуальном хосте?Django, можно запускать две разные версии?

Я отчаянно нуждаюсь в помощи!

Некоторые больше информации, то на Linux и сервера пользователей модов питона, вот что я пытаюсь с vitrualhost

<Location "/"> 
     SetHandler python-program 
     PythonHandler django.core.handlers.modpython 
     SetEnv DJANGO_SETTINGS_MODULE website.settings 
     SetEnv PYTHON_EGG_CACHE /var/cache/pyeggcache 
     SetEnv PYTHONPATH "sys.path + ['usr/lib/python2.6/site-packages/django2']" 
     PythonDebug On 
     PythonPath "['/var/www/website_live/src'] + ['/var/www/webiste_live/src/website'] + sys.path" 
    </Location> 

я заменил название сайта с «сайта» моя отдельная версия Джанго живет на /usr/lib/python2.6/site-packages/django2

+0

Вы определенно можете использовать два разных выпуска одновременно. Но чтобы ответить на вопрос, нам нужно знать, какое программное обеспечение вы используете: apache, nginx, mod_python или mod_wsgi. –

ответ

6

Если у вас есть несколько сайтов на сервере, вы должны использовать что-то вроде virtualenv.

Используя это, вы можете настраивать различные виртуальные среды и размещать пакеты, специфичные для конкретного сайта, и использовать их там, вместо того, чтобы испортить папку вашего сайта. Это также облегчает процесс разработки, поскольку вы легко можете настроить эти среды на своем локальном компьютере с помощью определенных версий того, что вы используете.

Это быстро становится очень удобно, если вы используете другие приложения, и это то, что Pinax использует очень сильно. Самый простой способ обработки пакетов и версий - просто создать файл требований.

+0

Это, наверное, лучший и самый простой способ сделать это. Это также делает разработку намного проще, если вы будете следовать одной и той же настройке локально. –

1

Конечно, это так, но для этого потребуется немного птенцов. Это зависит в основном от того, какой сервер вы используете.

Ключевым моментом является $ PYTHONPATH. Эта переменная хранит, где Python ищет модули для встраивания. Если вы используете

import django.conf 

это действительно просматривает все в $ директорий PYTHONPATH и ищет папку под названием django.

Таким образом, ключ заключается в том, чтобы манипулировать $ PYTHONPATH в зависимости от того, куда идет запрос. Если вы решили использовать mod_python и Apache, он может выглядеть следующим образом:

<VirtualHost *:80> 
    DocumentRoot "/var/htdocs/old_django_project" 
    ServerName old-django 
    PythonPath "sys.path + ['/var/software/old_django']" 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/var/htdocs/new_django_project" 
    ServerName new-django 
    PythonPath "sys.path + ['/var/software/new_django']" 
</VirtualHost> 

Затем посещение http://old-django/ приносит вам старый экземпляр Джанго и новое Джанго также.

5

Да, вы могли бы. Об этом я подробно рассказал об here.

0

Возможно, но в моем опыте среды, которая использовала разные версии Django и Python, она, как правило, становится беспорядочной, особенно если у вас более одного разработчика, работающего над проектами. Затем каждому разработчику необходимо поддерживать две версии Django и помнить, какие функции они могут и не могут использовать.

+1

Я обнаружил, что с помощью virtualenv и pip (и хранения его файла требований в моем репозитории кода) делает обслуживание практически без проблем. –

0

Я использую Wigwam для такого рода вещей. Это тяжелый подход — есть отдельная сборка каждого из Apahce, Python, Django и т. Д. —, но это работает очень хорошо.