Filipp Sanachev @FJCrux
Backend разработчик
Information
- Rating
- Does not participate
- Location
- Куала-Лумпур, Малайзия, Малайзия
- Date of birth
- Registered
- Activity
Specialization
Backend Developer
Senior
From 10,000 $
PHP
.NET
.NET Core
RabbitMQ
Redis
SQL
Docker
Nginx
Golang
FF:06:B5 разгадали же. в награду получаем автомобиль Demiurge в игре
Мало того, что продажи закрыли, так еще и текущие предзаказы вернули, в тч оплаченные, в тч в сторонних магазинах
nginx и регулярки прямо скажем не всегда работают как ожидаешь. Особенно, когда используется map и переменные вида $1..$9
Связано это, насколько я понимаю, с тем, что в $1..$9 содержатся данные последней вычисленной регулярки, а если используется map то, получается, значения там буду из него, а не из location (например)
У них даже дефект соответствующий есть, но воз и ныне там
Это сработает, если окружение linux. Для macos и windows не уверен, что профит будет существенным
Искать первопричину — это важно, но не всегда эту причину могут устранить за приемлимые время и деньги, откуда и получаются костыли. И тут вторая проблема, что после того, как причину устранили (а это может быть не скоро), те самые костыли обрасли новыми костылями
Да, действительно. Спасибо!
Если говорить про вариант «Не так давно», то он делался на коленке и команда не рассматривала рефакторинг этого кода, как нечто необходимое
Если же говорить про текущий вариант, то да, как выше отметили, мы либо закладываем это в оценку задачи, либо убеждаем продуктовый офис вынести это отдельной задачей, обычно они идут нам навстречу.
В нашем случае, у нас всегда должны быть тесты. А вот аннотаций для документации может не быть, а чтобы их писать, нужно изменить процесс разработки
Используйте в полной мере доступный функционал — есть ведь прекрасные PartialView, ChildAction(в ASP.NET) и ViewComponent(в ASP.NET Core).
Появится у вас задача на той же страничке, отобразить еще какой-то блок информации, не будете же вы и её добавлять во ViewModel?
Помимо того, что вы разделяете логику и отображение, вы еще и избавитесь от обеих ваших проблем
1. Вы можете делать publish на windows машине. В VS предусмотрено несколько вариантов, вплоть до создания готового dockerfile или копирования результатов publish на нужный вам ftp.
2. Можно настроить CI. Допустим, после прохождения тестов, у вас может создаваться новый контейнер, куда попадает исходный код (затем уже внутри делается publish), либо результаты publish, и сразу стартует контейнер.
Сейчас в проде — 4 веб приложения, несколько десятков консольных.
Проблем с деплоем не было, были «проблемы», связанные скорее со связкой dotnet core + linux:
Итого, у нас работа построена так:
1. Есть контейнер nginx, который выступает в качестве reverse-proxy.
2. Есть контейнеры с базами
3. Есть контейнеры с dotnet приложениями, внутри которых, кроме самого приложения, supervisor.
Объясню почему supervisor, а не вариант из репозитория — есть несколько контейнеров, внутри которых сидит не одно приложения. Обычно, это какие-то маленькие приложения, которые шлют письма или что-то подобное, для чего не хотелось бы создавать множество контейнеров.
Нюанс про docker-compose и локальную сеть между сервисами.
Если у вас много приложений и они все в разных compose-файлах, проще создать собственную сеть внутри docker. При работе с собственной сетью, все приложения, которые её используют, могут обратиться к любому другому приложению в этой сети по имени контейнера.
Насколько знаю (и использую в своих проектах), можно спокойно вытащить настоящий Ip — Request.HttpContext.Connection.RemoteIpAddress либо из заголовка X-Real-IP, даже если kestrel прячется за прокси.
В своих проектах используем supervisor, чтобы «демонизировать» asp.net core.
В итоге выходит как-то так: есть n-контейнеров с asp.net core приложениями, у которых внутри supervisor и само приложение, есть контейнер с nginx, который слушает все входящие запросы на 80 и 443 порты, а потом просто прокидывает в нужный контейнер, ну и всякие контейнеры с базами и прочим.
Из приятного в таком подходе — можем держать зоопарк приложений с разными версиями dotnet core всего лишь создав несколько образов