Evgeny
И не нужны никакие апострофы на отдельной строке
Yuriy
нормально выглядит. гораздо сложнее будет наладить хорошую работу с консулом
В каком смысле? Я сейчас планирую минимальный вариант с 3 нодами. Можете поделиться негативным опытом с ним?
Evgeny
Коллеги, нужен совет. Сейчас в моём проекте runtime-конфигурация вынесена в отдельный модуль, который получается через обычный require('config'). Таких мест около двух-двух с половиной сотен во всех приложениях. Встал вопрос о внедрении consul для хранения конфигурации, соответственно, конфиг должен читаться каждым приложением из него асинхронно при старте. Собственно, возникла мысль: при старте приложения заполнять require.cache вот так: const resolved = require.resolve('config'); require.cache[resolved] = { id: resolved, filename: resolved, loaded: true, exports: { foo: 42 }}; Как временный вариант, пока не перепишется использование модуля config по всему проекту — насколько это плохое решение? Возможно, кто-то сталкивался с подобным и может подсказать более надёжный путь?
херовый. лучше у всех сделай предзагрузочный файл который бкдет загружть конфиг и подсосввывать как аргумент основному аппу
Aleksand
В каком смысле? Я сейчас планирую минимальный вариант с 3 нодами. Можете поделиться негативным опытом с ним?
никакого негатива. просто это сложная отказоустойчивая вещь. надо понять его логику, правильно настроить, научить код нормально работать с агентом (в зависимости от варианты деплоя), понять кто как и когда может конфигурацию обновлять, что в принципе там можно хранить а что не стоит (зависит от проекта). это широкий архитектурный вопрос если кратко
Aleksand
херовый. лучше у всех сделай предзагрузочный файл который бкдет загружть конфиг и подсосввывать как аргумент основному аппу
ну то есть надо что-то переписать, а человеку надо просто сохранить обратную совместимость. без рефакторинга
Evgeny
Не надо ничего переписывать кроме деплоя
Evgeny
Там он загружает конфиг из файла, а тут ты загружаешь конфиг и дальше либо суешь его в файл который потом схватит конфиг, либо передаёшь его как параметр. Ну или мерзко перезаписываешь загруженный модуль, да
Aleksand
Не надо ничего переписывать кроме деплоя
так про деплой и вообще про приложение ничего не известно, поэтому нет оснований так утверждать
No1
И все в файле?)
Yuriy
Вот мне идея с ковырянием require.cache тоже не кажется хорошей, потому и спросил здесь.
No1
Что делать с динамически обновляемыми данными?))
Aleksand
Вот мне идея с ковырянием require.cache тоже не кажется хорошей, потому и спросил здесь.
она не хорошая, но для сохранения обратной совместимости надежной вполне нормальная. это костыль, надежный и временный.
Aleksand
У нас конфиг 100% статичен.
тогда вам консул зачем? просто собирайте конфиг из переменных окружения
Матрос
вот кстати у меня тоже вопрос по поводу конфигурирования но немного другой. Один модуль выдает события по которым я ищу совпадения прям в JSON справочнике, в котором все эти совпадения прописаны. Справочник отвечает за сообщения отправляемые другим сервисам в инфраструктуре. Мысль есть - сделать модуль который считывает этот JSON-справочник и импортируется глобально в аппу - при изменении справочника соответственно всех оповещает. Вам как кажется - это сильно криво? Как вообще делают в подобных кейсах?
Yuriy
тогда вам консул зачем? просто собирайте конфиг из переменных окружения
Хочется иметь одну точку модификации конфига. План был таков, что в консул загружается текущий конфиг, а все приложения его читают. На другой чаше весов у меня сейчас подход 12factor, где как раз всё в переменных окружения. Я пока оцениваю варианты с т.з. трудозатрат на внедрение.
Aleksand
Хочется иметь одну точку модификации конфига. План был таков, что в консул загружается текущий конфиг, а все приложения его читают. На другой чаше весов у меня сейчас подход 12factor, где как раз всё в переменных окружения. Я пока оцениваю варианты с т.з. трудозатрат на внедрение.
нормальный и гибкий деплой - только переменные окружения, ваша схема со статичным конфигом рухнет сразу как только нужно будет кастомизировать конфиг самый удобный и практичный вариант - дефолтная конфигурация из файла (который обязательно лежит в репозитории) а при старте чтение из окружения и обновление значений
No1
Ну вот смотрите, окружение - это здесь и сейчас. В консуле вы можете их перечитать не меняя код. Удобнее?
No1
При файле, вы при изменении конфига, будете передеплоивать код.
No1
Каждый сервис запишет то, что нужно ему)
Aleksand
При файле, вы при изменении конфига, будете передеплоивать код.
вы путаете конфигурацию и дискавери, не нужно динамические значения выносить в конфиг
Aleksand
Каждый сервис запишет то, что нужно ему)
а сервисов сколько? если я за день задеплоил и раздеплоил примерно миллион контейнеров по ситуации то это что у меня на каждый будет отдельный конфиг который еще и убрать кто-то должен потом?
No1
Зачем?
Aleksand
Зачем?
что зачем?
No1
У вас в одном месте конфиг
No1
Зачем отдельный конфиг?
No1
Там по коду разбросанно одно и тоже
Aleksand
Там по коду разбросанно одно и тоже
это сложно вообще обсуждать не зная что там в конфиге
No1
Вообще я не видел проблем с консулом, но всегда был fallback. А это уже могут быть и переменные окружения))
Pavel
люди как автоматически обновить все пакеты в package.json На последний
Pavel
неужели придется вручную номера версий вставить везде
Артур
npm update
Артур
только при условии что у тебя не указана конкретная версия
Pavel
указаны
Артур
там если в версии указано так «^1.0.0» то он обновит
Pavel
не обновляет
Pavel
я давно както обновлял, забыл или это yarn был
Pavel
npm-check -u вроде как справился, плохо что надо выбрать пакеты в меню
Pavel
после этих магических заклинаний вроде webpack-simple запускается грязно не ругается но страница Localhost:8080 пустая
Pavel
разобрался надо было на хост —host 0.0.0.0 запустить
Матрос
мне так никто и не ответит?
Матрос
вот кстати у меня тоже вопрос по поводу конфигурирования но немного другой. Один модуль выдает события по которым я ищу совпадения прям в JSON справочнике, в котором все эти совпадения прописаны. Справочник отвечает за сообщения отправляемые другим сервисам в инфраструктуре. Мысль есть - сделать модуль который считывает этот JSON-справочник и импортируется глобально в аппу - при изменении справочника соответственно всех оповещает. Вам как кажется - это сильно криво? Как вообще делают в подобных кейсах?
Aleksand
кто на чем там стоит не ясно
Nikolay
Nikolay
Просто кусочек правды
Михаил Макарычев
Чаще этой картинки сюда кидают только мем с '2'+1, '2'-1 и пр.
Bushrut
мэн, ты норм ? такое постить
CherryTea
а госпаде, пока грузилась гифа я уже невесь что себе представил, а там всего-то навсего шкурагейминг
Eugene
Здравствуйте. А как в node.js отдавать media файлы, например mp3 ? Ну например юзер загружает файл (Куда и в какую директорию его грузить?) И как потом вернуть? Думаю static не подойдет для такого?
Eugene
Использую Express.
arts
Static годится только для локалхоста. Отдавай nginx'ом.
Eugene
А в статике норм хранить файлики загруженные пользователем ?
arts
Норм.
Egor
@HellPirate res.sendFile
Eugene
@HellPirate res.sendFile
типа писать отдельный роут для отдачи файлов и там делать res.sendFile ?:)
Egor
можно, да
Ilya
но зочем. сказать экспрессу где статика и все
Egor
но зочем. сказать экспрессу где статика и все
может есть какой доступ к файлу, мидлу повесить
Mike Khromov
Народ, а сейчас вообще не вариант приюзать soundcloud без регистрации приложения? Я хотел его прикрутить через blessed js и сделать себе плеер но че-то хрен
Evgenii
Всем привет, подскажите пожалуйста, у меня совсем нубский новичковый вопрос, только знакомлюсь вообще с фронтендом (я DevOps) Почему node_modules это локальная папка? Почему не используется такой же подход как у python и pip например? Я знаю про глобальную установку, но кажется, что тут принято держать node_modules локально или я не прав?
Evgenii
Я сейчас в процессе придумывания как собирать фронтенд через TeamCity на девы разработчиков, разумеется, хочется чтобы сборка была максимально быстрой, поэтому пытаюсь понять почему NPM работает именно так, как на картинке выше, чтобы разобраться, как же это готовить
arts
В python тоже принято юзать virtualenv
Evgenii
В python тоже принято юзать virtualenv
принято кем? Я всегда делал pip requirements.txt и это замечательно работало
Evgenii
Python-разработчиками
Мой вопрос собственно совсем в другом
arts
В ноде тоже можно глобально устанавливать
Evgenii
В ноде тоже можно глобально устанавливать
npm i -g webpack webpack module.js:328 throw err; ^ Error: Cannot find module 'webpack'
Evgenii
В ноде тоже можно глобально устанавливать
это как-то по-особенному надо делать?
Михаил Макарычев
Я пытаюсь разобраться как сделать лучше
Всегда всё локально ставьте. За редким исключением
Evgeny
npm install webpack -g
Evgenii
npm install webpack -g
я же так и написал, не робзит
Evgeny
у меня робзит
Evgenii
Всегда всё локально ставьте. За редким исключением
получается мне хранить node_modules там где ведётся сборка и разработка, но добавить в .gitignore ?