У меня есть решение Sitecore 7.2, в которое я установил Unicorn 3.
Я использовал файл конфигурации по умолчанию, который поставляется. При разработке я включил прозрачную синхронизацию после начальной синхронизации.
<dataProviderConfiguration type="Unicorn.Data.DataProvider.DefaultUnicornDataProviderConfiguration, Unicorn" enableTransparentSync="true" />
Я создал файл transofrm, чтобы при развертывании решения в средах, не связанных с разработкой, он переключал enableTransparentSync обратно на false.
В этом решении есть несколько пользовательских модулей, и я использую команду Package Installer, созданную Бенджамином Вангансевинкелем (https://github.com/VGBenjamin/PackageInstaller)
Когда я запускаю командную строку для установки пакета, она выдает мне ошибку, указывающую, что она не может записать файл yml на диск.
Теперь я проверил файл Unicorn.config в этой среде и могу подтвердить, что для параметра enableTransparentSync установлено значение false.
Пакет, который я пытаюсь установить, пытается создать элементы в /sitecore/content/Applications/Content Editor/Context Menues/Default/, и я вижу, что с конфигурацией по умолчанию все в /sitecore/content/Applications/ будет синхронизировано. изд.
На компьютерах разработчиков установлены все модули sitecore, а файлы yml в каталоге /sitecore/content/Applications/Content Editor/Context Menues/Default/ сериализуются на диск.
Это может быть мое непонимание, но я думал, что если прозрачная синхронизация отключена, то при внесении изменений в Sitecore придется заходить в панель управления единорогом и синхронизировать все модификации вручную. Так почему же тогда я получаю ошибки о невозможности записи изменений на диск, когда прозрачная синхронизация не включена?
Теперь другим вариантом будет удаление следующих строк из default.config.
<include database="core" path="/sitecore/system/Field types"/>
<include name="Core Settings" database="core" path="/sitecore/system/Settings" />
<include name="Core Start Menu" database="core" path="/sitecore/content/Documents and settings/All users"/>
<include name="Core Applications" database="core" path="/sitecore/content/Applications"/>
Но прежде чем я это сделаю, я хочу знать, почему Unicorn использует прозрачную синхронизацию.
FYI: это полный стек ошибок
2016-03-22 15:38:15,996 [1] ERROR Sidewalk.SC.PackageInstaller.Client.Program [(null)] - System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.UnauthorizedAccessException: Access to the path 'D:\Websites\CI\Website\Unicorn\Default Configuration\Core Applications\Applications\Content Editor\Context Menues\Default\Bulk Export.yml' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.InternalDelete(String path, Boolean checkHost)
at Rainbow.Storage.SerializationFileSystemTree.WriteItem(IItemData item, String path)
at Rainbow.Storage.SerializationFileSystemTree.Save(IItemData item)
at Unicorn.Data.DataProvider.UnicornDataProvider.SaveItem(ItemDefinition itemDefinition, ItemChanges changes, CallContext context)
at Unicorn.Data.DataProvider.UnicornSqlServerDataProvider.SaveItem(ItemDefinition itemDefinition, ItemChanges changes, CallContext context)
at Sitecore.Data.DataProviders.DataProvider.SaveItem(ItemDefinition item, ItemChanges changes, CallContext context, DataProviderCollection providers)
at Sitecore.Data.DataSource.SaveItem(ID itemID, ItemChanges changes)
at Sitecore.Data.Engines.EngineCommand`2.Execute()
at Sitecore.Data.Engines.DataEngine.SaveItem(Item item)
at Sitecore.Data.Managers.ItemProvider.SaveItem(Item item)
at Sitecore.Data.Items.ItemEditing.AcceptChanges(Boolean updateStatistics, Boolean silent)
at Sitecore.Install.Items.ItemInstaller.VersionInstaller.InstallVersion(Item version)
at Sitecore.Install.Items.ItemInstaller.VersionInstaller.PasteVersion(XmlNode versionXml, Item target, VersionInstallMode mode, IProcessingContext context, Boolean removeOtherVersions)
at Sitecore.Install.Items.ItemInstaller.InstallEntry(PackageEntry entry)
at Sitecore.Install.Items.ItemInstaller.Flush()
at Sitecore.Install.Framework.SinkDispatcher.Flush()
at Sitecore.Install.Utils.EntrySorter.Flush()
at Sitecore.Install.Framework.EntryBuilder.Flush()
at Sitecore.Install.Zip.PackageReader.Populate(ISink`1 sink)
at Sitecore.Install.Installer.InstallPackage(String path, Boolean registerInstallation, ISource`1 source, IProcessingContext context)
at Sitecore.Install.Installer.InstallPackage(String path, ISource`1 source, IProcessingContext context)
at Sidewalk.SC.PackageInstaller.Service.SitecorePackageInstaller.InstallPackage(String path)
--- End of inner exception stack trace ---
System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.UnauthorizedAccessException: Access to the path 'D:\Websites\CI\Website\Unicorn\Default Configuration\Core Applications\Applications\Content Editor\Context Menues\Default\Bulk Export.yml' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.InternalDelete(String path, Boolean checkHost)
at Rainbow.Storage.SerializationFileSystemTree.WriteItem(IItemData item, String path)
at Rainbow.Storage.SerializationFileSystemTree.Save(IItemData item)
at Unicorn.Data.DataProvider.UnicornDataProvider.SaveItem(ItemDefinition itemDefinition, ItemChanges changes, CallContext context)
at Unicorn.Data.DataProvider.UnicornSqlServerDataProvider.SaveItem(ItemDefinition itemDefinition, ItemChanges changes, CallContext context)
at Sitecore.Data.DataProviders.DataProvider.SaveItem(ItemDefinition item, ItemChanges changes, CallContext context, DataProviderCollection providers)
at Sitecore.Data.DataSource.SaveItem(ID itemID, ItemChanges changes)
at Sitecore.Data.Engines.EngineCommand`2.Execute()
at Sitecore.Data.Engines.DataEngine.SaveItem(Item item)
at Sitecore.Data.Managers.ItemProvider.SaveItem(Item item)
at Sitecore.Data.Items.ItemEditing.AcceptChanges(Boolean updateStatistics, Boolean silent)
at Sitecore.Install.Items.ItemInstaller.VersionInstaller.InstallVersion(Item version)
at Sitecore.Install.Items.ItemInstaller.VersionInstaller.PasteVersion(XmlNode versionXml, Item target, VersionInstallMode mode, IProcessingContext context, Boolean removeOtherVersions)
at Sitecore.Install.Items.ItemInstaller.InstallEntry(PackageEntry entry)
at Sitecore.Install.Items.ItemInstaller.Flush()
at Sitecore.Install.Framework.SinkDispatcher.Flush()
at Sitecore.Install.Utils.EntrySorter.Flush()
at Sitecore.Install.Framework.EntryBuilder.Flush()
at Sitecore.Install.Zip.PackageReader.Populate(ISink`1 sink)
at Sitecore.Install.Installer.InstallPackage(String path, Boolean registerInstallation, ISource`1 source, IProcessingContext context)
at Sitecore.Install.Installer.InstallPackage(String path, ISource`1 source, IProcessingContext context)
at Sidewalk.SC.PackageInstaller.Service.SitecorePackageInstaller.InstallPackage(String path)
--- End of inner exception stack trace ---
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Sidewalk.SC.PackageInstaller.Client.ServiceReference.SitecorePackageInstaller.InstallPackage(String path) in C:\Projects\PackageInstaller\Sidewalk.SC.PackageInstaller.Client\Web References\ServiceReference\Reference.cs:line 88
at Sidewalk.SC.PackageInstaller.Client.Program.Main(String[] args) in C:\Projects\PackageInstaller\Sidewalk.SC.PackageInstaller.Client\Program.cs:line 281
Где вы можете видеть, что внутреннее исключение пытается сохранить элемент на диск в Rainbow.Storage.SerializationFileSystemTree.WriteItem (элемент IItemData, путь строки)
Обновить
Просто чтобы все знали, проблема связана с моей средой CI, и я получаю сообщение об ошибке как часть процесса развертывания.
Обновление 2
Я прочитал сообщение в блоге, http://kamsar.net/index.php/2015/10/Unicorn-Introduction-Transparent-Sync/, и я, очевидно, все еще что-то понимаю.
Есть следующий текст:
Примечание. Вы должны выполнить первоначальную сериализацию конфигурации с отключенной прозрачной синхронизацией, прежде чем включать ее. В противном случае элементы в конфигурации будут казаться исчезнувшими, так как прозрачная синхронизация показывает все нулевые элементы на диске!
Включить прозрачную синхронизацию очень просто: возьмите файл, к которому вы хотите добавить прозрачную синхронизацию, и поместите в него эту строку:
и
После включения прозрачной синхронизации все, что вам нужно сделать, это изменить элементы на диске, и обновления немедленно появятся в Sitecore.
Читая это, я предполагаю, что если вы можете включить прозрачную синхронизацию, то вы можете отключить ее снова.
Изучив ридми на https://github.com/kamsar/Unicorn, я предполагаю, что для синхронизации на другом средах, после выполнения развертывания вы можете выполнить http-запрос к панели управления с помощью powershell.
Если вы не можете отключить прозрачную синхронизацию, то как лучше всего остановить прозрачную синхронизацию при развертывании в моей среде CI? и использовать powershell для обновления.
В настоящее время я хочу, чтобы прозрачная синхронизация работала только в средах разработки.