Слоты для развертывания Umbraco, Azure и строки подключения
Мы пытаемся использовать слоты развертывания Azures для сайта Umbraco, который мы создали.
По умолчанию Umbraco использует DSN, определенный в разделах connectionStrings файла web.config, и мы хотим, чтобы он использовал строку подключения для слота развертывания, в котором он находится.
Что мы пробовали
Слоты развертывания Azure помещают все определенные параметры приложения (и строки подключения) в переменные среды и для доступа к ним мы можем использовать Environment.GetEnvironmentVariable()
который работает, но, кажется, нет способа заставить Умбрако сделать это.
Поэтому в OnApplicationInitialized() (в /App_Code/Core/UmbracoAppStart.cs) мы загрузили раздел строки подключения из web.config, извлекли connstr из env vars, добавили DSN в раздел строки подключения и сохранили. Правильная строка подключения захватывается и сохраняется, но это, похоже, перезапускает приложение (из-за изменения web.config), и поэтому мы просто получаем тайм-ауты. (Или ошибки кэширования Umbraco XML, или загрузка страницы занимает 20 минут).
Я знаю, что вы можете хранить разделы appsettings и connectionstrings в отдельных файлах. Но атрибут файла (который не вызывает перезапуск, если указанный файл изменен) не работает в разделе connectionStrings - только атрибут configSource, и он перезапускается, если он был изменен.
(из: ASP.NET web.config: configSource и атрибуты файла)
Помогите
Кто-нибудь нашел способ обойти это? Нам просто нужно заставить Umbraco использовать строку подключения слота развертывания, а не ту, которая есть в webconfig.
Я даже готов копировать и вставлять вслепую в данный момент, не понимая, как это работает - и я ненавижу это делать:). Но это то, что происходит, когда люди соглашаются, когда клиент хочет жить как раз перед Рождеством...
1 ответ
Вам не нужно вводить код для использования строки подключения Azure или настроек приложения. Просто дайте им те же ключи / имена, что и у вас в файле web.config, и они будут использоваться вместо этого.
Так что, если у вас есть это в вашей веб-конфигурации:
<add name="umbracoDbDSN" connectionString="Server={server};Initial Catalog={db};Persist Security Info=False;User ID={user};Password={password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=300;" providerName="System.Data.SqlClient" />
Ваша конфигурация слота должна быть такой:
Чтобы заменить настройку приложения, просто используйте тот же ключ. Итак, для этого:
<add key="umbracoUseSSL" value="false" />
Если вы хотите, чтобы настройка была специфичной для слота, вы должны активировать Slot setting
флажок.