Unicorn 3 синхронизирует элементы на диск, когда прозрачная синхронизация не включена

У меня есть решение 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 для обновления.

В настоящее время я хочу, чтобы прозрачная синхронизация работала только в средах разработки.


person Darren Guy    schedule 22.03.2016    source источник


Ответы (1)


Я думаю, вы неправильно понимаете прозрачную синхронизацию.

Что он делает; это позволяет немедленно отражать обновленный YML в Sitecore, не выполняя новую синхронизацию. Он делает это, скрыто вводя данные об изменениях в Sitecore. Это полезно, когда вы только что извлекли данные из GIT или переключаетесь между ветками — избавляет от необходимости синхронизироваться (или забыть об этом).

Чего он НЕ делает, так это отключает автоматическую синхронизацию ваших изменений Sitecore. Они постоянно записываются на диск для любых областей дерева контента, которые Unicorn было приказано контролировать.

Так что на самом деле почти противоположное тому, что вы пишите; "Возможно это мое непонимание, но я думал, что если прозрачная синхронизация отключена, то при внесении изменений в Sitecore нужно заходить в панель управления единорогом и синхронизировать все изменения вручную. Так почему же тогда у меня возникают ошибки о не возможность записывать изменения на диск, когда прозрачная синхронизация не включена».

Ссылка: http://kamsar.net/index.php/2015/10/Unicorn-Introduction-Transparent-Sync/

person Mark Cassidy    schedule 23.03.2016