
Dmitry
11.12.2016
23:16:27
грубо говоря эти скрипты выполняются по порядку
накатывая все изменения на базу исторически
и тогда ты получаешь последнюю версию
без потери данных

Google

Dmitry
11.12.2016
23:17:54
и тогда можно обновляться с любой версии на любую нажал я npm update myapp
и получил в preinstall апдейтики
я пока так планирую

Dreamerinnoise
12.12.2016
07:34:59

Aleh
12.12.2016
07:38:18
Вам скорее всего не нужен, но есть такая штука как event sourcing (типа как redux на клиенте). Там достаточно просто удалить все данные, кроме ивентов и рестартануть ивенты
А так запилите коллекцию с миграциями, куда пишите последнюю версию схемы. Скрипт запуска миграций такой: взять последнюю версию из базы, взять из папки все более новые миграции и накатывать по одной
В миграцию есть смысл добавлять две команды - up и down. Если потом придётся откатывать

Andrew
12.12.2016
09:10:21

eugene
12.12.2016
09:15:47
выносятся в отдельные микросервисы, с возможностью блокировки операции записи

Aleh
12.12.2016
09:16:53

Evgeny
12.12.2016
09:30:29
Я, кажется, понял. Чувак, а ты знаешь как работают замыкания?

KlonD90
12.12.2016
09:30:54
короткие?

Pavel
12.12.2016
09:31:14
да, электрические

Google

Vitaliy
12.12.2016
09:51:52


Andrew
12.12.2016
09:58:33
Можешь ещё раз вопрос сформулировать?
вопрос в следующем - в пыхе когда приходит коннект от браузера, хедеры всякие, сам реквест, будь то гет или пост или что еще, скрипт отрабатывает, отдает результат и завершается, с полной очисткой памяти. поэтому искаропке в пыхе нет и не бывает никакого стейта, каждый раз приходится с клиента куку слать, парсить ее, сессию из файла или еще откуда таскать и прочие ужосы. в ноде все иначе, плюс коннект может не обрываться, в частности для СПАхи с кучей аякса это вообще гут. Плюс пока процесс крутится, он хранит весь стейт. Т.е. вот ты запустил node index.js допустим и доколе скрипт не завершит выполнение всех-всех-всех операций либо не крашнется, стейт сохраняется, а если мы в скрипте запустим веб-сервер, который слушает порт, то все, пока скрипт не крашнется или по CTRL-C Или как еще не отвалится, стейт хранится. При этом на порт лосятся клиенты с разных браузеров, т.е. один и тот же скрипт обслуживает кучу разных запросов. Я нутром чую, что для каждого отдельного коннекта стейт хранится отдельно, иначе это была бы вакханалия. Вопросов два - евент луп единый для всех коннектов или тоже по лупу на каждый коннект? И насколько сильно изолированы стейты, могут ли они сообщаться с ведома скрипта?


Дмитрий
12.12.2016
10:00:05
Я, кажется, понял. Чувак, а ты знаешь как работают замыкания?

Vladimir
12.12.2016
10:00:18
есть общий стейт - это все переменные в скрипте
а есть стейт реквеста - он в обработчике

Andrew
12.12.2016
10:02:41
т.е. я правильно понимаю что на потоке единый стейт на все коннекты?

Vladimir
12.12.2016
10:03:08
например, если ты делаешь скрипт
var players = [];
app.post(‘/addPlayer’, (req,res)=>{
players.push[req.body.name]
})
то в players будет общий стейт
и поток один

Andrew
12.12.2016
10:03:27
т.е. любой коннект в потенциале может получить доступ к этому общему стейту?

Konstantin
12.12.2016
10:03:30
Что такое стейт? Есть переменные и есть их область видимости. Обработчик запроса — функция. Всё, что было в функции, остаётся в функции.

Vladimir
12.12.2016
10:03:42

Andrew
12.12.2016
10:03:48
стейт это все переменные запущенного скрипта
вообще все

Pavel
12.12.2016
10:03:51
Он на то и общий какбэ

Andrew
12.12.2016
10:04:00
понял, мерси
хотя одну штуку не догоняю я еще
вот 100 бразуеров ломятся на порт
т.е. 100 коннектов имеем
и для каждого надо сходить в бд

Google

Andrew
12.12.2016
10:05:29
т.к. все асинхронно и евент луп
непойми когда что отработает
допустим коннект к бд имеем один
на всех
через него для каждого лезем
т.е. шлем в базу 100 запросов
ответы прилетают в переменные
название переменной по сути будет единое для всех
получается действительно только замыкания спасут отца русской демократии


Pavel
12.12.2016
10:07:35
Давай я расскажу как я понимаю, а товарищи меня поправят, если я где фигню сморожу
1) Приложение запускается и висит в памяти, загрузив все модули.
2) Для каждого клиента запускаются нужные ему обработчики и они всю его фигню хранят в замыканиях, то есть в памяти. Обработчики имеют доступ и к переменных верхних скоупов.
3) Клиент отваливается — сборщик мусора всё это дело прибирает.
Количество обрабатываемых клиентов упирается только в память для хранения их переменных.
А приложение на всех одно
ответы прилетают в переменные
Ответы прилетают в обработчик и падают ему в замыкание. Соседний вызов этого обработчика для другого клиента этого ответа никогда не увидит.

Pavel
12.12.2016
10:09:59
Ну, если его специально не прокинуть в общий скоуп

Konstantin
12.12.2016
10:11:49
Нужно не забывать о том, что обработка в node происходит в один поток. Это означает, что никакого «соседнего» вызова нет. Есть более ранний и более поздний вызовы.

Pavel
12.12.2016
10:12:18

Evgeny
12.12.2016
10:12:19
Соседний вызов === соседнее замыкание

Pavel
12.12.2016
10:13:19
Вернее даже, соседний асинхронный отложенный вызов, который ещё ждёт своего выполнения

Konstantin
12.12.2016
10:15:53
Допустим есть обработчик запроса (псевдокод, похожий на express.js):
app.get('/example', (req, res, next) => {
console.log('Request handler started');
dbRequest(req.query, (err, data) => {
console.log('DB request ended');
});
console.log('Request handler ended');
});
К моменту, когда начнет выполнятся обработчик для второго вопроса, выполнение этой функции для первого запроса уже будет завершено.

Pavel
12.12.2016
10:16:27
Здесь нужен стикер со сборщиком мусора

Evgeny
12.12.2016
10:17:20

Google

Konstantin
12.12.2016
10:18:11
Смысла держать замыкание из обработчика в результат выборки из БД нет, т.к. ответ на клиента все равно надо отправлять из колбека запроса к БД.
Сможете привести пример стейта, который нужно было бы из колбека dbRequest передать в обработчик?
Вдруг я что-то упускаю из виду
* то, что req, res, next в замыкании, понятно. Я имею ввиду какие-то дополнительные переменные.

Artur
12.12.2016
10:34:56
Ребят, кому еще прилетело про https://medium.com/@deian/63e6e0a566a7#.8dlz2whq5?

Pavel
12.12.2016
10:48:19
Только на неделе думал, насколько сложно закинуть зловред в NPM

Vladimir
12.12.2016
10:48:51
несложно было всегда
есть же пост/пре-инстал хуки

Admin
ERROR: S client not available

Дмитрий
12.12.2016
10:52:17
Можно скомпилировать ещё что нибудь

Vladimir
12.12.2016
10:52:49
и запустить на тысячах чужих CI

Дмитрий
12.12.2016
10:52:57
Я представляю, как бы бомбануло, если бы left-pad не выпилился, а делал чтонибудь эдакое

Pavel
12.12.2016
10:53:14

KlonD90
12.12.2016
10:53:58

Artur
12.12.2016
10:54:12
Про смысл статьи я понял. Вопрос в том, что письмо от этого товарища всем мейнтенерам в репе npm прилетело?

Vladimir
12.12.2016
10:54:17

Artur
12.12.2016
10:55:08

Vladimir
12.12.2016
10:55:28
смотри синдре, сабстек и зкат удалят свои пакеты и чо будет?

Google

KlonD90
12.12.2016
10:55:57
тем более что один из пакетов
npm и так фактически удалил

Artur
12.12.2016
10:56:22

Vladimir
12.12.2016
10:56:32

Artur
12.12.2016
10:56:40
Вот же
Весело
Все держится фактически на взаимном доверии и соплях

Vladimir
12.12.2016
10:57:19
допустим он лочит бинарники os regardless
зашринкврапишь на винде
на маке не будет работать

Artur
12.12.2016
10:57:55
Как вариант еще bundleDependencies, проверяешь сборку в изолированной среде, пакуешь и в бой

Vladimir
12.12.2016
10:57:57
и с бандл/пир депсами шринкврап тоже плохо работает

KlonD90
12.12.2016
10:57:57

Vladimir
12.12.2016
10:58:04
ахахах

Artur
12.12.2016
10:58:26

Vladimir
12.12.2016
10:58:34

Artur
12.12.2016
10:58:46
Короче везде засада

KlonD90
12.12.2016
10:58:49

Artur
12.12.2016
10:59:00