Pavel
хотя по идее - CORS вообще не должны работать по умолчанию
D
Привет, кто-нибудь работал с миграциями в sequlize? Использовал umzug?
D
Я вот читаю про это и не могу понять одного. Миграции должны выполняться последовательно, одна применятся к предыдущей и так далее. Каждая миграция хранится в отдельном файле. Если я хочу зачекаутить какой-то старый коммит и привести базу данных к схеме, которая соответствует этому коммиту, я ведь не смогу последовательно откатить все миграции до состояния этого коммита. Потому что файлов миграций, которые были добавлены после этого коммита не будет существовать после чекаута.
D
можно конечно сначала сделать реверт всех миграций до того коммита, а потом сделать чекаут в VCS
D
но это неудобно потому что надо смотреть до какой конкретной миграции надо откатываться
Vint
но это неудобно потому что надо смотреть до какой конкретной миграции надо откатываться
Ну и? Всё так, геморрой. Но можно для дева делать sequelize.sync (смотри доку). Он накатит тебе БД из моделей текущего коммита. seed'ов только не будет, понятное дело.
D
понятно
Cheslav
может кто объяснить как запустить node приложение на хероку? вопрос по Procfile и npm командам
Danil
какое приложение?
Cheslav
react c нодой
Cheslav
что то не собирается там
Cheslav
наверное с этими командами намудрил
Danil
ошибка какая?
Danil
выхлоп кинь
Cheslav
у меня залита папка с проектом реакта, и в ней папка с сервером ноды. как я понимаю хероку запускает package.json корневой сразу
Cheslav
в Procfile команда web: sh -c 'cd ./server/ && exec npm i && exec node app.js'
Cheslav
нагуглил ее)
Danil
а, у тебя сервер в отдельной папке
Cheslav
проект вроде собирается, но ничего не отображается потом в браузере, как я понимаю из за того что серверные npm модули не установлены
Danil
в любом случае нужен выхлоп из git push heroku master
Cheslav
$ git push heroku master Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 348 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Compressing source files... done. remote: Building source: remote: remote: —---> Node.js app detected remote: remote: —---> Creating runtime environment remote: remote: NPM_CONFIG_LOGLEVEL=error remote: NPM_CONFIG_PRODUCTION=false remote: NODE_VERBOSE=false remote: NODE_ENV=production remote: NODE_MODULES_CACHE=true remote: remote: —---> Installing binaries remote: engines.node (package.json): unspecified remote: engines.npm (package.json): unspecified (use default) remote: remote: Resolving node version 6.x via semver.io... remote: Downloading and installing node 6.10.2... remote: Using default npm version: 3.10.10 remote: remote: —---> Restoring cache remote: Loading 2 from cacheDirectories (default): remote: - node_modules remote: - bower_components (not cached - skipping) remote: remote: —---> Building dependencies remote: Installing node modules (package.json) remote: Running heroku-postbuild remote: remote: > my-react-starter-pack@0.1.0 heroku-postbuild /tmp/build_2cbe27a 1c7ec69f6e511c9062f40f1ea remote: > npm run build && sh -c 'cd ./server/ && exec npm i && exec node app.js' remote: remote: remote: > my-react-starter-pack@0.1.0 build /tmp/build_2cbe27a1c7ec69f6e5 11c9062f40f1ea remote: > node scripts/build.js remote: remote: Creating an optimized production build... remote: Compiled successfully. remote: remote: File sizes after gzip: remote: remote: 171.72 KB build/static/js/main.f421d2fe.js remote: 229 B build/static/css/main.59a7a2f2.css remote: remote: The project was built assuming it is hosted at the server root. remote: To override this, specify the homepage in your package.json. remote: For example, add this to build it for GitHub Pages: remote: remote: "homepage": "http://myname.github.io/myapp", remote: remote: The build folder is ready to be deployed. remote: You may also serve it locally with a static server: remote: remote: npm install -g pushstate-server remote: pushstate-server build remote: open http://localhost:9000 remote: remote: chat-node@1.0.0 /tmp/build_2cbe27a1c7ec69f6e511c9062f40f1ea/serve r remote: ├─┬ cors@2.8.3 remote: │ ├── object-assign@4.1.1 remote: │ └── vary@1.1.1 remote: ├─┬ express@4.15.2 remote: │ ├─┬ accepts@1.3.3 remote: │ │ ├─┬ mime-types@2.1.15 remote: │ │ │ └── mime-db@1.27.0 remote: │ │ └── negotiator@0.6.1 remote: │ ├── array-flatten@1.1.1 remote: │ ├── content-disposition@0.5.2 remote: │ ├── content-type@1.0.2 remote: │ ├── cookie@0.3.1 remote: │ ├── cookie-signature@1.0.6 remote: │ ├─┬ debug@2.6.1 remote: │ │ └── ms@0.7.2 remote: │ ├── depd@1.1.0 remote: │ ├── encodeurl@1.0.1 remote: │ ├── escape-html@1.0.3 remote: │ ├── etag@1.8.0 remote: │ ├─┬ finalhandler@1.0.1 remote: │ │ ├── debug@2.6.3
Cheslav
remote: │ │ └── unpipe@1.0.0 remote: │ ├── fresh@0.5.0 remote: │ ├── merge-descriptors@1.0.1 remote: │ ├── methods@1.1.2 remote: │ ├─┬ on-finished@2.3.0 remote: │ │ └── ee-first@1.1.1 remote: │ ├── parseurl@1.3.1 remote: │ ├── path-to-regexp@0.1.7 remote: │ ├─┬ proxy-addr@1.1.4 remote: │ │ ├── forwarded@0.1.0 remote: │ │ └── ipaddr.js@1.3.0 remote: │ ├── qs@6.4.0 remote: │ ├── range-parser@1.2.0 remote: │ ├─┬ send@0.15.1 remote: │ │ ├── destroy@1.0.4 remote: │ │ ├─┬ http-errors@1.6.1 remote: │ │ │ └── inherits@2.0.3 remote: │ │ └── mime@1.3.4 remote: │ ├── serve-static@1.12.1 remote: │ ├── setprototypeof@1.0.3 remote: │ ├── statuses@1.3.1 remote: │ ├─┬ type-is@1.6.15 remote: │ │ └── media-typer@0.3.0 remote: │ └── utils-merge@1.0.0 remote: ├─┬ socket.io@1.7.3 remote: │ ├── debug@2.3.3 remote: │ ├─┬ engine.io@1.8.3 remote: │ │ ├── base64id@1.0.0 remote: │ │ ├── debug@2.3.3 remote: │ │ ├─┬ engine.io-parser@1.3.2 remote: │ │ │ ├── after@0.8.2 remote: │ │ │ ├── arraybuffer.slice@0.0.6 remote: │ │ │ ├── base64-arraybuffer@0.1.5 remote: │ │ │ ├── blob@0.0.4 remote: │ │ │ └── wtf-8@1.0.0 remote: │ │ └─┬ ws@1.1.2 remote: │ │ ├── options@0.0.6 remote: │ │ └── ultron@1.0.2 remote: │ ├─┬ has-binary@0.1.7 remote: │ │ └── isarray@0.0.1 remote: │ ├── object-assign@4.1.0 remote: │ ├─┬ socket.io-adapter@0.5.0 remote: │ │ └── debug@2.3.3 remote: │ ├─┬ socket.io-client@1.7.3 remote: │ │ ├── backo2@1.0.2 remote: │ │ ├── component-bind@1.0.0 remote: │ │ ├── component-emitter@1.2.1 remote: │ │ ├── debug@2.3.3 remote: │ │ ├─┬ engine.io-client@1.8.3 remote: │ │ │ ├── component-emitter@1.2.1 remote: │ │ │ ├── component-inherit@0.0.3 remote: │ │ │ ├── debug@2.3.3 remote: │ │ │ ├── has-cors@1.1.0 remote: │ │ │ ├── parsejson@0.0.3 remote: │ │ │ ├── parseqs@0.0.5 remote: │ │ │ ├── xmlhttprequest-ssl@1.5.3 remote: │ │ │ └── yeast@0.1.2 remote: │ │ ├── indexof@0.0.1 remote: │ │ ├── object-component@0.0.3 remote: │ │ ├─┬ parseuri@0.0.5 remote: │ │ │ └─┬ better-assert@1.0.2 remote: │ │ │ └── callsite@1.0.0 remote: │ │ └── to-array@0.1.4 remote: │ └─┬ socket.io-parser@2.3.1 remote: │ ├── component-emitter@1.1.2 remote: │ ├─┬ debug@2.2.0 remote: │ │ └── ms@0.7.1 remote: │ └── json3@3.3.2 remote: └── underscore@1.8.3 remote: remote: remote: —---> Caching build remote: Clearing previous node cache remote: Saving 2 cacheDirectories (default): remote: - node_modules remote: - bower_components (nothing to cache) remote: remote: —---> Build succeeded! remote: —---> Discovering process types remote: Procfile declares types -> web remote: remote: —---> Compressing... remote: Done: 35.5M remote: —---> Launching... remote: Released v7 remote: https://mypollingsocketapp.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy.... done. To https://git.heroku.com/mypollingsocketapp.git 6d82691..ddcbebe master -> master
Danil
а в экспрессе ты статику отдаешь?
Cheslav
ага
Danil
не вижу причин, почему он может не работать :)
Danil
посмотри билдпак под реакт
Danil
как вариант можешь попробовать web: npm i ./server/ && node ./server/app.js
Zaur
всем привет, народ посдкажите как лучше сделать: Есть объект у которого есть основные и расширенные параметры. Объекты с расширенными параметрами создаются не часто. думаю создать в mysql отдельную таблицу для расширенных параметров, и создавать там записи только при необходимости, а с записью из основной таблицы связывать через id. Думается мне, что это ускорит доступ к основной таблице. Вообще такая практика используется? Или можно не заморачиваться и все параметры хранить в одной таблице и в полях где нет данных просто оставить NULL ?
arts
Зависит от того, насколько часто основные используются без расширенных.
Zaur
Зависит от того, насколько часто основные используются без расширенных.
Cейчас к основным обращение идет в среднем ~30 000 в день. По расширенные информации пока нет, это новый функционал, еще не готовый. Но думаю это будет не больше 30% от основных.
arts
Тогда лучше вынести в отдельную таблицу, имхо.
Zaur
а нет наврал, в среднем за день ~7000 обращений
Aleksey
Почему?
Zaur
умеют, просто ленятся ))
Дима
Вот сейчас обидно было
Завтра
А что там сложного?
arts
Можно попробовать прочитать, что написано. Говорят, помогает.
Михаил Макарычев
как ты вообще устанавливал? Какой командой?
Михаил Макарычев
попробуй sudo npm i marked -g
Bohdan
как сделать,чтобы запускался локальный eslint?
arts
http://lmgtfy.com/?q=windows+npm+install+global
D
в объекте request есть ли поле с адресом откуда был совершен реквест?
D
или если я хочу это узнать мне надо гет параметр передавать в запросе
Nikita
всем привет, подскажите, что по ноде лучше почитать?
Nikita
желательно актуального в 2017
I
https://vk.com/doc123534285_444087599?hash=bf0eb3a6ceeb8fd5d8&dl=796ba8c612e8113b5c
I
Например книгу по ноде 2017 года
I
Нет
Nikita
второе издание?
Nikita
спасибо вам, почитаю
Vlad
всем привет, обновил ноду к последней версии, теперь не могу стартонуть проект, вылазит The module '/usr/lib/node_modules/bcrypt/build/Release/bcrypt_lib.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 47. Подскажите пожалуйста как поправить(
Alex
Переустановить bcrypt чтобы скомпилировался под новую версию ноды
Vlad
а можете ткнуть носом на доку и команду, как правильно сделать?
Vladimir
rm -rf node_modules && npm install
Vlad
делал, не помогло
Vladimir
Ну тогда я бы снес node, npm и поставил бы их заново
Denis
rm -rf /usr/lib/node_modules/bcrypt && npm install -g bcrypt ?
A
Парни, а у кого есть опыт с apns? У меня вот какой вопрос: token, по которому отправляются уведомления, привязывается к паре приложение + телефон. А как мне всё это привязать в итоге к учетке пользователя по уму? Запихнуть в сессию? Запилить какой-нибудь интересный велосипед?)
A
Не, это понятно, что хранить в бд. Вопрос в том, к чему привязывать-то эти ключи? Вроде бы кажется что к сессии, но хм.. что-то меня терзают смутные сомнения
A
Ммм.. а можно для тех у кого понедельник тяжелый выдался?))
Alexander
Нифига
Alexander
Ангуляр 1
Дима
> не отягощённый Legacy > Angular 1 Мне кажется, или здесь противоречие? 🤔
Dmitry
Не, это понятно, что хранить в бд. Вопрос в том, к чему привязывать-то эти ключи? Вроде бы кажется что к сессии, но хм.. что-то меня терзают смутные сомнения
у нас клиента авторизовывался по телефону и в отдельной табличке мы для него хранили связку ид поиложения и токен для пушей
kdm🇩🇰
йо, есть ли в ноде "дебаг флаги" т.е фича которые тестируются легко отключить тупо меняя режим на 'production' не меняя ничего в коде(закоментировать фичу к примеру)
kdm🇩🇰
либо в webstorm'e возможно есть что-то такое
Zaur
ставишь в коде debugger и запускаешь в webstorm debug-режим, скрипт останавливается и можно отлаживаться
kdm🇩🇰
блинн не правильно я написал, мне надо, чтобы к примеру в продакшене фича отключалась сразу. что на подобие #IFDED `фича которая не будет работать в продакшене`#ENDIF
Zaur
у меня для этого рядом с приложением лежит json конфиг, в котором указан режим запуска: dev, test, release. В приложении if-ом проверяю в каком режим работает
kdm🇩🇰
оп, спасибо за идею
Zaur
если используешь системы контроля версий, не забудь этот конфиг заигнорить, чтобы не ушел на релиз )
kdm🇩🇰
хорошо =)
A
у нас клиента авторизовывался по телефону и в отдельной табличке мы для него хранили связку ид поиложения и токен для пушей
Это понятно, а если клиент разавторизовался? Если это произошло штатным способом - понятно, можно из этой таблички нужные данные вытереть. А если сессия пользовательская просто истекла или отозвана через веб-интерфейс? Пользователь фактически не авторизирован, а уведомления приходят.
Serhii
params.language = req.body.language; params.unit = req.body.unit; params.currency = req.body.currency; params.timezone = req.body.timezone;