Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> django, south, небольшая грабля с джангой и югом 
:(
    Опции темы
bilbobagginz
  Дата 23.12.2010, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Привет!
Django==1.2.3+south question.

Ситуация такая: код эволюционирует, а с ним и схема БД (новые столбы, таблички, изменения, в общем ALTERы)
Вручную базу обновлять, синхронизировать модели -  в лом => Enter migrations.

Играюсь с Югом (python2.5), в смысле south.
На своем компе A инициализирую миграции приложения:
Код

python ./manage.py schemamigration app1 --initial

добавляю миграционные данные в p4 (i.e. version control)
обновляю код на тестовом боксе, комп B с немигрированной базой (более старой), обновляю код, запускаю:
Код

python ./manage.py migrate app1

Кричит на меня: мол не могу считать миграции нужного человечеству модуля 'django.contrib.auth'.
Круто! (оказывается на боксе A действительно в django/contrib/auth появился каталог "migrations")

Залезаю (на боксе А) в app2/migrations/__0001_initial.py оригинального (не auth) приложения, от которого зависит мое начальное app1, внутри проекта к которому принадлежат оба приложения. Там добавляю 'django.contrib.auth' перед другой зависимостью. Запускаю заново
Код

python ./manage.py migrate app1

И работает. Но: мне пришлось вмешиваться в работу этого south.
это неудобно, не масштабируемо.

Вижу так: существует граф зависимостей моделей, всяких внешних ключей.
Если следовать вышеизложенному методу, значит с каждым core модулем мне надо будет корячиться и добавлять их в ручную.
Не хорошо.
  • Нет ли более умного способа ?
  • Можно как-то в коде модуля указать, что миграции системного модуля реализовавшего внешний ключик - не нужны ?
  • Может есть более умный струмент ?
  • Или может быть более перспективно все модули впихнуть в virtualenv приложения, и поставлять приложение в каталоге со "своим" питоном и его модулями ?
побеседуем ?



Это сообщение отредактировал(а) bilbobagginz - 23.12.2010, 09:39


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
bilbobagginz
Дата 23.12.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



добавил уведомления...себе на мыло.


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Daevaorn
Дата 23.12.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 3
Всего: 70



Ничего не понял. Что вы хотите сделать? Опишите пожалуйста по человечески и с кодом.

Editorial: зачем постить dummy пост чтобы подписаться на уведомления?
PM MAIL WWW   Вверх
bilbobagginz
Дата 23.12.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Daevaorn, извиняюсь за неясность.
по пунктам:
Цитата(Daevaorn @  23.12.2010,  09:20 Найти цитируемый пост)
Что вы хотите сделать?


Цитата(bilbobagginz @  23.12.2010,  08:24 Найти цитируемый пост)
Ситуация такая: код эволюционирует, а с ним и схема БД (новые столбы, таблички, изменения, в общем ALTERы)
Вручную базу обновлять, синхронизировать модели -  в лом => Enter migrations.

этот параграф описывает ситуацию и проблему:

когда 
  • проект django состоит из нескольких приложений
  • приложения работают друг с другом
  • данные лежат во внешней (настоящей) БД (DBMS), напр. в Оракле
  • код растет и развивается
создается нужда изменять схему БД.
эта нужда обостряется когда и код и бд - боевые, и бегут несколько версий кода.
т.е. нужно удобный инструмент держать код и базу данных в синхронизации, с возможностью добавок в схему, без потери данных.
с возможным рефакторингом таблиц/колонок (говоря таблицами и колонками)
этот процесс синхронизации эволюции кода с базой данных называют "миграцией" (или "мутацией", или "эволюцией схемы БД", терминология переводится с англ., может в русской терминологии это как-то иначе именуют)
Есть несколько инструментов реализации этих "миграций".
сейчас тестирую south и о нем идет речь.

ХОЧУ: иметь удобные миграции БД с версии на версию.

Цитата(Daevaorn @  23.12.2010,  09:20 Найти цитируемый пост)
Опишите пожалуйста по человечески и с кодом.

кода тут практически нет.
1. установка south:
Код

easy_install South

2. добавка модуля последним в settings.py переменной INSTALLEDֹ_APPS:
Код

INSTALLED_APPS = [
   ...
   'south',
]

3. работа через manage.py:
Код

# первичное создание миграционной инфы 
# (запускается на компе А, работающем с бд но.1):
manage.py schemamigration app1 --initial 
# после обновлений в models.py, нужно внести миграционные изменения
# (запускается на компе А, работающем с бд но.1):
manage.py schemamigration app1 --auto
# произвести миграцию бд в последнюю миграцию
# (запускается на компе Б, работающем с бд но.2, 
# после предварительного копирования миграционной инфы 
# [ напр. через контроль версий] с компа А):
manage.py migrate app1

это ессно делается на разных машинах, 
чтобы изменения версии но.N на бд но.1 "мигрировали" на бд но. 2., 
чтобы можно было обновить код до версии но.N до запуска версии N с базой но. 2

ситуация проясняется ?


Это сообщение отредактировал(а) bilbobagginz - 23.12.2010, 12:03


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Daevaorn
Дата 23.12.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 3
Всего: 70



bilbobagginz, Вы опять написали много букв ни о чем и опять без толкуsmile

Проблема у вас в чем? South хороший и проверенный инстремент. Если у вас именно с ним проблема, то с большой долей вероятности вы им просто не правильно пользуетесь.
PM MAIL WWW   Вверх
bilbobagginz
Дата 23.12.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



это не вопрос из серии "помогите понять почему не компиляется код!"
я приглашаю на дискуссию
Цитата(bilbobagginz @  23.12.2010,  08:24 Найти цитируемый пост)
Но: мне пришлось вмешиваться в работу этого south.
это неудобно, не масштабируемо.

чтобы понять лучше - что я не так делаю. а может быть и не "не так".






--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
bilbobagginz
Дата 28.12.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Daevaorn, 
Цитата(Daevaorn @  23.12.2010,  16:15 Найти цитируемый пост)
South хороший и проверенный инстремент. Если у вас именно с ним проблема, то с большой долей вероятности вы им просто не правильно пользуетесь. 

Раскопки дошли до корня проблем: стало понятно что south не очень хорошо протестирован с ораклом (не спрашивайте почему оракл работает у нас с джангой), результирующий SQL вылетал с ошибками :(
Чтобы починитъ генерируемый SQL извратнулись monkey-patch-ем и перегрузили метод south south.db.generic.column_sql()
который создавал при опр. условиях неперевариваемый для оракла SQL.
Кроме этого было бы удобно, если бы south мог выплевывать SQL при флажке --db-dry-run.
проблема: этот обезьян работает только из инстанциированного сервера, а хотелось бы без запуска, всухую (т.е. сейчас патч работает из нашего кода, а хотелось бы, чтобы он работал из кода south.

В общем еще немного поиграемся, и начнем подкидывать патчи в south.

всем мир.

Добавлено через 3 минуты и 54 секунды
кстати, по ходу в коде south нашего патча пока нет, а вышел уже джанго 1.2.4
И обещают скоро south внедрить в django.core.*



Это сообщение отредактировал(а) bilbobagginz - 28.12.2010, 00:27


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Веб-разработка и фреймворки | Следующая тема »


 




[ Время генерации скрипта: 0.1136 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.