Перезагрузите приложение ASP.NET Core при изменении файлов DLL (развертывание бина) - PullRequest
0 голосов
/ 06 сентября 2018

Среда: ASP.NET Core 2.1, Ubuntu.

В старом стиле ASP.NET, когда я выполнял развертывание бина (например, загрузил несколько DLL-файлов), веб-приложение обнаружило бы это и перезагрузило себя -очень полезно.

С Core это не так.Мне нужно остановить и перезапустить процесс dotnet MyApp.dll.

Как настроить обнаружение изменений в двоичных файлах и перезагрузку?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

В Ubuntu есть средства просмотра файлов, которые могут выдавать команды перезапуска всякий раз, когда файлы изменяются, например, systemd или inotify, но я настоятельно рекомендую это сделать. Загрузка может быть приостановлена ​​или быть медленной, и при загрузке 50 файлов представьте, что перезапуск происходит через каждые несколько секунд. Сервер не может знать, когда вы закончили загрузку последней DLL. IIS имеет ту же проблему, она надежна в разработке, потому что вы обновляете страницу после полной перестройки DLL. Но когда вы работаете, вы не хотите, чтобы случайные посетители загружали ваш сайт на полпути, пока он еще загружается. Ошибки, блокировки файлов, всевозможные странности могут случиться.

Как указал Крис Пратт, вы хотите написать сценарий вашего рабочего процесса развертывания. Определите, в какой среде вы разрабатываете, но если у вас есть Visual Studio и WinSCP, это так же просто, как написать пару строк кода с помощью Scripting и Task Automation .

Тогда ваш рабочий процесс публикации может быть следующим:

  1. Хит опубликовать в Visual Studio
  2. VS выполнит скрипт winscp после завершения публикации
    • Аутентификация на удаленном сервере
    • Загрузка папки публикации в удаленную папку
    • Удалить старые файлы
    • Чернослив журналов
    • После всего выполненного выпуска systemctl restart kestrel-myapp команда
  3. Затем ваш сайт развертывается, очищается и перезапускается самым надежным способом одним щелчком мыши.
0 голосов
/ 06 сентября 2018

Я ничего не знаю о том, что сделает это для вас. IIS отслеживает такие вещи, как каталог bin, web.config и т. Д. И перезапускает пул приложений при обнаружении изменений, но это происходит потому, что он знает об этом. Это также полнофункциональный веб-сервер, и одна из таких функций - утилизация пула приложений при изменении файлов. Кестрел, который я предполагаю, вы используете , а не . Это очень простой веб-сервер, который делает то, что ему нужно, строго как веб-сервер. Вот почему более традиционный веб-сервер, такой как IIS, Apache, Nginx и т. Д., Обычно используется в качестве обратного прокси-сервера перед Kestrel - для обеспечения более сложных функций.

Все это говорит о том, что это действительно вопрос вашей стратегии выпуска. Лично я бы посоветовал вам использовать более надежные библиотеки вставки копий, но если вы захотите пойти по этому пути, вы также можете script . Создайте сценарий оболочки для копирования каталога bin и , перезапустите приложение. Ваш релиз должен быть на один рельс как можно больше. Каждый раз, когда требуется вмешательство человека, у вас есть потенциальная точка отказа, потому что люди изначально подвержены ошибкам. Сценарий, однако, после того, как он протестирован и гарантированно работает, будет работать каждый раз, потому что он всегда делает одни и те же вещи в одном и том же порядке.

...