These are chat archives for NodejsRUS/chat

29th
Sep 2017
Ilia Pavlenkov
@dortonway
Sep 29 2017 09:39
Всем привет. Кто-нибудь юзал sequelize?
Dmitriy Simushev
@JustBlackBird
Sep 29 2017 09:40
Привет, да
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:02
у меня очень странная проблема
есть две модели. у каждой уникальный индекс. у одной на 2 поля, у другой на 3
при первой синхронизации создаются индексы, при второй у модели, что 2 индекса, всё ок, а у той, что 3, вылетает ошибка, что она опять пытается создать индекс
@JustBlackBird не знаешь в чём проблема?
Dmitriy Simushev
@JustBlackBird
Sep 29 2017 10:04
Неа
Alex Kheben
@zbitname
Sep 29 2017 10:04
Хорошо бы код посмотреть
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:04
ща скину
Dmitriy Simushev
@JustBlackBird
Sep 29 2017 10:04
@dortonway посмотри, какие запросы генерит sequelize
Alex Kheben
@zbitname
Sep 29 2017 10:05
И оригинальный код ошибки ещё
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:05
T2 и T4 такие же, как T1
сейчас ошибку скину
Dmitriy Simushev
@JustBlackBird
Sep 29 2017 10:06
Какие запросы генерит sequelize?
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:07
в ошибке виден запрос
Alex Kheben
@zbitname
Sep 29 2017 10:08
column "T2Id" does not exist
Очевидно, это является проблемой
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:09
ой, не та ошибка, ща поправлю
а чего она не существует? я же в модели прописал её
Alex Kheben
@zbitname
Sep 29 2017 10:11
А таблица до этого уже существовала? Если да, то она не должна появляться автоматически, надо либо миграцию писать (которая добавит новые колонки), либо sync делать, а последнее, насколько я помню, убивает таблицу и создаёт её заново (могу ошибаться)
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:11
я дропаю базу, создаю новую и вызываю sync()
сейчас с первого синка такая ошибка вылетела
Alex Kheben
@zbitname
Sep 29 2017 10:12
А можешь посмотреть как эта таблица реально выглядит?
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:12
сейчас
Alex Kheben
@zbitname
Sep 29 2017 10:12
Может именование колонок другое, не такое как ты указал
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:12
хм, что-то она вообще не создалась
Alex Kheben
@zbitname
Sep 29 2017 10:13
А есть запрос на создание этой таблицы?
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:13
да, сейчас скину
Alex Kheben
@zbitname
Sep 29 2017 10:14
И посмотри в каком порядке эти запросы выполняются
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:15
не всё вставилось, но там дальше просто стэктрэйс
создались таблицы
сейчас гляну
есть такое поле. но ошибка уже другая
Alex Kheben
@zbitname
Sep 29 2017 10:16
Может у тебя получилось сделать так, что скрипт не дожидается пока таблица создастся и выполняет запрос на создание индекса?
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:17
хм, не знаю как это могло бы произойти
я же просто sync() вызываю
Alex Kheben
@zbitname
Sep 29 2017 10:17
Процесс создания таблицы асинхронный, соответственно следует дождаться пока СУБД вернёт соответствующий ответ о том, что "Всё ок, я создаль!"
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:17
сейчас посмотрю что это за ошибка вылетела. раньше вроде другая была
просто это же sequelize разруливает, наверное?
последовательность
Alex Kheben
@zbitname
Sep 29 2017 10:18
Если у тебя ошибка не стабильная и процесс прерывается на разных этапах, то это похоже на проблемы с асинхронностью
Не факт, я давно не юзал sequelize, в более ранних версиях мне о некоторых вещах приходилось заботиться самостоятельно
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:20
зря я сид запустил, это же тестовые таблицы
ща без сида синк сделаю
Alex Kheben
@zbitname
Sep 29 2017 10:21
Смотрю на примеры кода из документации sequelize и не вижу ничего похожего на то, что ты привёл выше. Может есть смысл юзать cli и придерживаться того стиля описания моделей, что используется в документации?
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:22
по ходу дока ещё не обновлена
там можно через классы. ща нашёл в доке
Sequelize Models are ES6 classes.
так, первый синк нормально отработал
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:28
фух, вопсроизвёл
в общем, почему-то на тестовых таблицах перестало вопроизводиться
на боевой вопроизвелось
сейчас скину
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:34
сейчас ошибку скину
Alex Kheben
@zbitname
Sep 29 2017 10:39
Очевидно, что ты что-то делаешь неправильно, но я не могу сказать что именно...
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:39
т.е. индекс он пытается создать после создания таблиц
но он почему-то не проверяет существует ли он уже
а в соседней модели тоже уникальный индекс, только на 2 поля, а не 3 и там всё ок
Alex Kheben
@zbitname
Sep 29 2017 10:40
Индекс уже есть, если ты не заметил :)
Другой вопрос в том: почему sequelize не проверяет его наличие перед созданием индекса?
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:41
я дебажил sequelize и там в init приходят все unique indexes для обеих моделей, но в sync для рабочей они пропадают перед вызовом addIndex, а для бажной остаются
там есть this.options.indexes публичный https://github.com/sequelize/sequelize/blob/master/lib/model.js
ещё до вызова .sync() он должен очищаться
(только не пойму где)
для рабочей модели очищается, а для бажной - нет
Ilia Pavlenkov
@dortonway
Sep 29 2017 10:47
@zbitname any ideas?)
Alex Kheben
@zbitname
Sep 29 2017 10:50
Я помню, что когда работал с sequelize не пользовался методом sync вообще. После первого релиза приложения, когда все схемы уже на проде я под каждое изменение (создание/удаление индексов/FK/колонок, изменение типов и т.п.) делал миграции. А до релиза всё проверял только тестами (unit и integration тестами), и перед запуском этих тестов дропал всю БД.
Alex Kheben
@zbitname
Sep 29 2017 11:00
Наверное, надо документацию смотреть
Ilia Pavlenkov
@dortonway
Sep 29 2017 11:01
я смотрел, но как-то ничего не нашёл( по sync посмотрел
в таком же формате в соседней модели написано и работает
это работает