- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
День добрый,
Интересная задача, есть веб сервер для python приложений, там стоит CentOS, в репозитарии только 2.4 питон, он и стоит на сервере, связь с апачем через mod_wsgi. Появилась задача поставить 2.7, ну проблемы вроде нет, качнул исходники, собрал в /opt/ линки разложил, даже модули установил некоторые, но подошел момент когда надо в апач mod_wsgi вложить от нового питона, и вот тут ступор, мне надо что бы оба питона были доступны, т.е какие-то сайты работали с 2.4 как и ранее, а какие-то с новым 2.7. Собственно вопрос "как быть" )))) получится ли каким-то образом для отдельного VHOST подключить модуль собранный с python2.7 ?
С Уважением,
два апача.
два апача.
Та ладно :D Сейчас в голове мелькнула мысль действительно о двух апачах, с проксированием запросов... но как-то это не кошерно, это всего лишь модуль :D
---------- Добавлено 05.09.2012 в 07:38 ----------
Пытался разобрать код mod_wsgi, да бы подменить мне там необходимый WSGIScriptAlias в надежде на то, что удастся собрать копию модуля, собранного с другим python, но названного иначе и с другим ключиком который используется, собрать удалось , подменив "WSGIScriptAlias" на "27WSGIScriptAlias " но вышел факап дальше :)
Ругается об этом:
После чего чилды начинают круто дохнуть,
[Wed Sep 05 00:03:23 2012] [warn] mod_wsgi: Compiled for Python/2.7.3.
[Wed Sep 05 00:03:23 2012] [warn] mod_wsgi: Runtime using Python/2.4.3.
[Wed Sep 05 00:03:23 2012] [notice] child pid 11878 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:24 2012] [notice] child pid 11879 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:24 2012] [notice] child pid 11880 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:24 2012] [notice] child pid 11881 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:24 2012] [notice] child pid 11882 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:25 2012] [notice] child pid 11884 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:26 2012] [notice] child pid 11886 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:26 2012] [notice] child pid 11887 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:27 2012] [notice] child pid 11889 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:27 2012] [notice] child pid 11890 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:27 2012] [notice] child pid 11891 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:27 2012] [notice] child pid 11892 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:27 2012] [notice] child pid 11893 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:27 2012] [notice] child pid 11894 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:27 2012] [notice] child pid 11895 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:28 2012] [notice] child pid 11896 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:28 2012] [notice] child pid 11897 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:28 2012] [notice] child pid 11898 exit signal Segmentation fault (11)
[Wed Sep 05 00:03:28 2012] [notice] child pid 11899 exit signal Segmentation fault (11)
....
Возможно загруженный ранее модуль от 2.4 откладывает какую-то ссылку где-то на момент подгрузки его апачем, что второй модуль наступает на нее при проверке этой? Я не особо шарящий в C тип , может кто подскажет? Может при сборке , что-то указать принудительно, что бы он RUNTiME воспринимал иначе? именно эта копия модуля. Я так понимаю проблема пока что именно в том, что он определяет откуда-то runtime версию.
Питон собран с --enable-shared (иначе другая ошибка при сборке mod_wsgi в принципе :D)
mod_wsgi-3.3
---------- Добавлено 05.09.2012 в 07:46 ----------
На сколько я вижу срабатывает Py_GetVersion(), которая видимо берется из 'Python.h', в таком случае, какого хрена, если сборка происходила с --prefix=/opt/python/ оно python.h читает по умолчанию... или таки Py_GetVersion() уже срабатывает не из того окружения?
---------- Добавлено 05.09.2012 в 07:58 ----------
Мдя, а static void wsgi_python_version(void) выходит просто "нотификейшон".... видимо падает по какой-то другой причине.....
Так же как и с двумя php dso - через 2 отдельных апача
Python устроен так, что для каждого процесса есть некоторая глобальная структура, в которой хранится служебная информация -- загруженные модули, состояние интерпретатора и прочее. Имена у этой структуры в python-2.4 и python-2.7 одинаковые, из-за чего при линковке при загрузке DSO одна структура перекрывает другую и они не могут работать вместе.
Может помочь в исходниках апача заменить RTLD_GLOBAL на RTLD_LOCAL в srclib/apr/dso/unix/dso.c, но я не знаю, не сломает ли это работу других модулей, которые зависят друг от друга. Можно добавить костыль в виде указания RTLD_LOCAL только для питоновских модулей.
Можно попробовать ещё добавить в flags RTLD_DEEPBIND.
Python устроен так, что для каждого процесса есть некоторая глобальная структура, в которой хранится служебная информация -- загруженные модули, состояние интерпретатора и прочее. Имена у этой структуры в python-2.4 и python-2.7 одинаковые, из-за чего при линковке при загрузке DSO одна структура перекрывает другую и они не могут работать вместе.
Может помочь в исходниках апача заменить RTLD_GLOBAL на RTLD_LOCAL в srclib/apr/dso/unix/dso.c, но я не знаю, не сломает ли это работу других модулей, которые зависят друг от друга. Можно добавить костыль в виде указания RTLD_LOCAL только для питоновских модулей.
Можно попробовать ещё добавить в flags RTLD_DEEPBIND.
Так может собрать wsgi таким образом, что бы они выдавали разные данные в эту самую структуру? Или 2.7 каким-то образом собрать с другим именем для этой структуры и туда модуль направить :D Ну уж очень сильно хочется пройтись таким путем :D
Некоторые так любят наступать на грабли, что удивляет
Возьми патч для запуска 4 и 5 чпыха как dso паралельно и запусти на стенде
Дай нагрузку и аосмотри что произойдет
Так может собрать wsgi таким образом, что бы они выдавали разные данные в эту самую структуру? Или 2.7 каким-то образом собрать с другим именем для этой структуры и туда модуль направить :D Ну уж очень сильно хочется пройтись таким путем :D
Ну разве что пробеганием по исходникам и заменой имён.
Но флаги к dlopen() должны решать эту пробему.
https://groups.google.com/forum/?fromgroups#!topic/modwsgi/UYmct8iFdoA
Ну разве что пробеганием по исходникам и заменой имён.
Не помогло, пробовал...
Забил я в общем на два модуля, уже не актуально, возникла другая проблема, есть по прежнему установленный в /usr/ питон 2.4 с ним все работает, поставленный 2.7 ведет себя странно.... А именно: собираю модуль отдельно для 2.7 питона (wsgi), включаю его вместо модуля от 2.4, все в порядке, но вот апликуха начинает выдавать ошибку подключения к базе, причем проблема в том, что пытается апликуха попасть в базу под логином root, а не указанным в settings.py данным (пробовал Django 1.3.1 / 1.4 / 1.4.1) та же фигня. Достаточно обратно вернуть модуль в апаче на 2.4 - все сразу работает, что бы это могло быть?
Я полагаю какие-то проблемы с окружением, или почему игнорируется настройка базы указанная в settings.py ?
myapp.wsgi:
import os
import sys
sys.path.append('/home/.....')
sys.path.append('/home/...../base/templatetags')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
os.environ['PYTHON_EGG_CACHE'] = '/home/...../temp/'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
При таком конфиге, с 2.4 нет никаких проблем. Переключаем на 2.7 и теряется указанное в settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx',
'USER': 'xxxx',
'PASSWORD': 'xxxx',
'HOST': '',
'PORT': '',
},
'afisha': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx',
'USER': 'xxx',
'PASSWORD': 'xxx',
'HOST': '',
'PORT': '',
}
}
Какие соображения будут :D ?