Форум сайта python.su
Есть простенький сайт python + nginx (wsgi).
В питоновском коде есть import своих модулей, лежащих рядом (или выше на директорию).
Поэтому есть sys.path.insert(0, path)
Понадобилось создать копию сайта и сделать изменения в импортируемых модулях.
Теперь возникает конфликт, т.к. sys.path для обоих сайтов единый и происходит путаница в импортируемых модулях.
Как настроить nginx (wsgi) чтоб sys.path был уникальный для каждого сайта?
Офлайн
я сделал так - в одной папке лежат: папка-библиотека, папка-приложение1, папка-приложение2. (пример, ewe, blog, sitenews)
оба приложения юзают библиотеку, но не видят друг друга. в каждом проекте есть settings.py с классом Conf.
при старте текущая папка в sys.path подменяется родительской папкой (она будет корнем проекта)
import sys
import os
from settings import Conf
project_path = os.path.dirname(os.path.realpath(__file__))
root_path = project_path.rpartition(os.sep)[0]
sys.path[0] = root_path
os.chdir(root_path)
import ewe
Conf.path_project = project_path
Conf.path_uploads = os.path.join(project_path,'uploads')
ewe.conf = Conf
ewe._db_connect()
Офлайн
А как python подружен с wsgi?
Офлайн
o7412369815963Как понял, вся соль в этом:
при старте текущая папка в sys.path подменяется родительской папкой (она будет корнем проекта)
sys.path[0] = root_path
Офлайн
Александр КошелевНе совсем понял вопроса… дружбой не я занимаюсь, а админ :)
А как python подружен с wsgi?
server {
listen xxx.xxx.xxx.xxx:80;
server_name site1.xxxxxx.com;
charset windows-1252;
access_log logs/access.log main;
error_log logs/error.log;
include wsgi_vars;
location / {
root html/ftp;
index home.php main.php index.php index.html index.htm;
}
location /site1 {
root /www/site1;
wsgi_pass /www/site1/main.py;
wsgi_pass_authorization off;
wsgi_script_reloading on;
}
location /site2 {
root /www/site2;
wsgi_pass /www/site2/main.py;
wsgi_pass_authorization off;
wsgi_script_reloading on;
}
}
Офлайн
CEMEHСкажите своему админу, что он профнепригоден:-)
Не совсем понял вопроса… дружбой не я занимаюсь, а админ :)
Офлайн
конечно uwsgi надо…
>это не отразится на втором сайте?
нет, у каждого свой index.wsgi
Офлайн
Так… что-то я запутался вконец…
Поставил uwsgi.
Александр Кошелевт.е. я должен разнести их по разным портам, и в конфиге должно быть что-то типа:
И конечно, разные сайты должны висеть в разных процессах, чтобы не шарить окружение и в частности sys.path. У вас проблема именно из-за этого.
location /site1 {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9002;
}
location /site2 {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9003;
}
sys.path[0] = root_path
o7412369815963Но мне думается, что это приведет к очень странным багам.
>это не отразится на втором сайте?
нет, у каждого свой index.wsgi
sys.path[0] = root_path
os.chdir(root_path)
import ewe
Офлайн
> o7412369815963 утверждает, что достаточно сделать
где я утверждаю что этого достаточно? более того, я выше написал “у каждого свой index.wsgi”
>как понял, это в одном процессе
нет, каждый проект имеет свой процесс, и это не считая того что каждый ваш проект уже запущен в 10..20 экземплярах (процессов, зависит от настроек wsgi)
>т.е. я должен разнести их по разным портам, и в конфиге должно быть что-то типа:
типа того
Офлайн
o7412369815963Сорри, значит не понял ранее.
> o7412369815963 утверждает, что достаточно сделать
где я утверждаю что этого достаточно? более того, я выше написал “у каждого свой index.wsgi”
Офлайн