Sitecore 8 Requirements

Reading through the requirements for running Sitecore 8 implementation in production environment, here is my recommendation:

Systems Architecture and Hardware:

  • Quad core processor (up-to 8 threads)
  • 16 GB of RAM
  • Microsoft Windows Server 2012 R2 (64 bit)
  • Microsoft SQL Server 2014
  • MongoDB 3.0
  • IIS 8.5
  • .NET Framework 4.5.2

Solution Architecture

  • Sitecore 8 with xDB
  • Solr for Search

Development Applications

  • Visual Studio 2014

Sitecore Search Index Root Item is not defined

Exception: System.InvalidOperationException
Message: Root item is not defined
Source: Sitecore.Kernel
at Sitecore.Diagnostics.Assert.IsNotNull(Object value, String message)
at Sitecore.Search.Crawlers.DatabaseCrawler.Initialize(Index index)
at Sitecore.Search.Index.AddCrawler(ICrawler crawler)

This is one of the most common errors we see in the sitecore logs or when we try to login to sitecore desktop.

To resolve it, try the following:
– Go to sitecore/admin/showconfig.aspx
– Find all entries for <index> attributes. Ctrl+F “<index”.
– Ensure all index entries have <root></root> node specified.
– Ensure all <root> node paths are valid and do exists in the sitecore respective databases.

Upgrading Sitecore

Lessons learned while upgrading sitecore from 6.5 to 7.2 final release. While most of the steps are pretty straight forward and as documented by sitecore. There are some gotchas that you may want to keep in mind while upgrading it. Here are some of the notes that I’ve compiled while upgrading a project.

Upgrading to .Net 4.5.2

Running the automatic upgrade seems to have worked out fine while using Visual Studio 2013.

6.5 to 6.6

Link to upgrade documentation –

While following the steps, I came across a case where the upgrade package gets stuck after copying files (when you try to Install the upgrade package). You will notice the final statement being Preparing to install file ‘sitecore_files\Web.config’ Changing file ‘\webedit.css’ Copying files to be installed to solution and backing up overwritten files.

To fix it make sure give enough permission to /temp folder. In fact I temporarily set it to Everyone. After making this change, the upgrade package executed successfully.

If you happen to use scSearch.Contrib for sitecore queries, you may have to download the source and rebuild it using sitecore.kernel.dlls from 6.6 and Lucene I noticed some incompatibility issues.

6.6 to 7.0

Link to upgrade documentation –

This being a major update, surprisingly it went through pretty smoothly. After this update, the lucene compatibility issues with scSearch.Contrib started surfacing again. To fix this I tried to recompile the source code with sitecore 7.0 dlls and Lucene but that did not work this time. Instead resorted to using a compiled library for

7.0 to 7.1

Link to the upgrade documentation –

At this point, making scSearch.Contrib work was becoming increasingly difficult. I decided to completely remove it from the project and rework the search pieces. Lucky for me the search logic was described at one location and retrofitting it to use Sitecore.ContentSearch instead of scSearch.Contrib was lot easier. I found this to be a good guide in getting started with Sitecore.ContentSearch APIs. One of the caveats I see is you have to normalize guids if you want to do Field based guid search. But on the plus side, if you have POCO objects for your templates, you could easily use them to search against. Also, LukeAll is a good tool to peak into your indexes to understand them better.

7.1 to 7.2

Link to the upgrade documentation –

I ran into issues while building the solution after the upgrade, where I started seeing build errors due to different targets being set in different projects.

Ensure that all projects have appropriate build targets. For me I set them all to .Net 4.5.1 and builds started working successfully.

7.2 to 7.2 final

Link to the upgrade documentation –

This was also quite straight forward to being with. Although there were minor issues relating to Caching that was again resolved by retrofitting the solution for sitecore 7.2.

Final thoughts – It was quite an easy ride trying to upgrade sitecore from 6.5 to 7.2 final. The biggest hurdle was moving away from scSearch.Contrib since it was such a core piece to the solution. At the time of this writing, version 7.5 is already out. I will try to update this post once I get a green light to upgrade the solution to 7.5.

Sitecore Unbucketable Item stored in an Item Bucket

While working with sitecore buckets, it is possible that you will encounter this warning on top of the item:

Unbucketable Item stored in an Item Bucket
This item is stored in an item bucket. However, it is not hidden because its template is not bucketable. If you want to hide this item in an item bucket, you must make the template that is based on bucketable

It could mean that either you have items in that bucket that are not bucketable or the current item itself is unbucketable but is placed inside a bucket item. For former, simply sync the item as shown in the screenshot below and for latter, select the parent bucket item, and try syncing it.

If you still notice this warning, you may want to revert and bucket the item again.
Hope this helps.

Cannot connect to the instance default of Coveo Enterprise Search hosted on localhost port 52800

Coveo Admin kept throwing this error:

Cannot connect to the instance default of Coveo Enterprise Search hosted on localhost port 52800.

Check for following current problems and try again :

The Coveo Enterprise Search service may not have been started.
You may not have administrator rights.
The Coveo Enterprise Search service log on account may have changed.

Turns out the problem was one of the index sources was pointing to a url that was not accessible.

The build stopped unexpectedly because of an internal failure

Ran into this issue the other day where one of the projects from the solution was not building and throwing this error:
Error 1 The build stopped unexpectedly because of an internal failure. Microsoft.Build.Exceptions.BuildAbortedException: Build was canceled. Failed to successfully launch or connect to a child MSBuild.exe process. Verify that the MSBuild.exe "C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" launches successfully, and that it is loading the same that the launching process loaded. If the location seems incorrect, try specifying the correct location in the BuildParameters object, or with the MSBUILD_EXE_PATH environment variable. at Microsoft.Build.BackEnd.NodeProviderOutOfProc.CreateNode(Int32 nodeId, INodePacketFactory factory, NodeConfiguration configuration) at Microsoft.Build.BackEnd.NodeManager.AttemptCreateNode(INodeProvider nodeProvider, NodeConfiguration nodeConfiguration) at Microsoft.Build.BackEnd.NodeManager.CreateNode(NodeConfiguration configuration, NodeAffinity nodeAffinity) at Microsoft.Build.Execution.BuildManager.PerformSchedulingActions(IEnumerable`1 responses) at Microsoft.Build.Execution.BuildManager.HandleNewRequest(Int32 node, BuildRequestBlocker blocker) at Microsoft.Build.Execution.BuildManager.IssueRequestToScheduler(BuildSubmission submission, Boolean allowMainThreadBuild, BuildRequestBlocker blocker) D:\MaM\Server\ClientServices\Dev\ClientService 1.4\Conduit.Mam.ClientServices.Common.Initizliaer\Conduit.Mam.ClientServices.Common.Initizliaer.csproj Conduit.Mam.ClientServices.Common.Initizliaer
The solution was as simple as restarting Visual Studio.

Unable to load the specified metadata resource

Got this error while working on Entity Framework this morning. Turns out it was due to the fact that I moved .edmx files to a new folder called Entities. The solution was to add it to connectionstring.
So, something like this:

connectionString="metadata=res://*/SysOrder.csdl|res://*/SysOrder.ssdl|res://*/SysOrder.msl;provider=System.Data.SqlClient;provider connection string="data source=server;initial catalog=dbname;user id=user;password=password;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient"

is now like this:

connectionString="metadata=res://*/Entites.SysOrder.csdl|res://*/Entities.SysOrder.ssdl|res://*/Entities.SysOrder.msl;provider=System.Data.SqlClient;provider connection string="data source=server;initial catalog=dbname;user id=username;password=password;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient"

Btw, this was the error:

StackTrace: " at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource..ctor(String originalPath, String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n at System.Data.Metadata.Edm.MetadataCache.SplitPaths(String paths)\r\n at System.Data.Common.Utils.Memoizer`2.Result.GetValue()\r\n at System.Data.Common.Utils.Memoizer`2.Evaluate(TArg arg)\r\n at System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean initializeAllCollections)\r\n at System.Data.Objects.ObjectContext..ctor(EntityConne
ction connection, Boolean isConnectionConstructor)\r\n at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)\r\n at Informatics.Data.Entities.SysOrderEntities..ctor() in C:\\Projects\\Informatics\\Websites\\Informatics.Internet\\Informatics.Data\\Entities\\SysOrder.Designer.cs:line 34\r\n at Informatics.Data.SysOrderManager..ctor() in C:\\Projects\\Informatics\\Websites\\Informatics.Internet\\Informatics.Data\\Entities\\SysOrderManager.cs:line 10\r\n at Informatics.Data.SysOrderManager.GetSysOrderManager() in C:\\Projects\\Informatics\\Websites\\Informatics.Internet\\Informatics.Data\\Entities\\SysOrderManager.cs:line 15\r\n at Informatics.Business.TestDrive.GetTrial(Trial trialDto) in C:\\Projects\\Informatics\\Websites\\Informatics.Internet\\Informatics.Business\\TestDrive.cs:line 46\r\n at Informatics.Business.Trial.TestDriveTrialRequest(Setting setting, String firstName, String lastName, String company, String address, String address1, String city, Str
ing state, String zip, String country, String email, String phone, String reseller, String subscribe, String productName, String ipaddress) in C:\\Projects\\Informatics\\Websites\\Informatics.Internet\\Informatics.Business\\Trial.cs:line 210\r\n at Informatics.Websites.layouts.waspbarcode.forms.InventoryControlDemo.BtnSubmit_Click(Object sender, EventArgs e) in C:\\Projects\\Informatics\\Websites\\Informatics.Internet\\Informatics.Websites\\layouts\\waspbarcode\\forms\\inventory_control_demo.ascx.cs:line 32"
TargetSite: {System.Collections.Generic.List`1[System.Data.Metadata.Edm.MetadataArtifactLoaderResource] LoadResources(System.String, System.String, System.Collections.Generic.ICollection`1[System.String], System.Data.Metadata.Edm.MetadataArtifactAssemblyResolver)}

Google Voice: Grab an extra no. on top of extra no.

Google started sending out invites to the new Google Voice service. If you don’t know yet what Google Voice is, you can watch this video.

But being a freelancer, it is always better to grab an extra no. that will stay put with your business and another number for personal life. At first I got one for myself, got my name in it and felt really happy about it, and later got one for business, got the name in it and is all set for rocking.

Separating the numbers will make things easier for me as I swtich bettween personal and business calls. I can also assign just one phone connection to both the numbers and have full control over the priority of call I take.

If you are traveling a lot internationally, don’t forget to bind your Google Voice number with Gizmo5 and start using the service whereever you go at a fractional cost. You can read more about it here. If you have any more ideas that could help freelancers with Google Voice, please do let me know!

Website development flow

I spent some time preparing this flow chart on how I manage projects. Thought it would help a new freelancer understand one of the ways of how software gets done in freelancing world. Most of the stuff in this flow chart is pretty much self explanatory but feel free to comment if you have any questions. Chao…

Continue reading

Trying hard to stay focused… still no help

Since the day I built my new cool desktop with awesome ati graphics I’ve been a victim of “guys who spend 4+ hours a day playing stupid games” disease. Well at least not stupid.

I’ve been trying couple of things to get my head straight and concentrate more on working rather than watching stupid old uk shows like Green Wing or playing games like Fallout 3 and [PROTOTYPE] or reading crap at Engadget/TechCrunch. My latest motivation generator is a simple print out text that tells me what I should be doing… but it’s not working!!! Yet again I spent more than 4 hours playing stupid Prototype. Somebody haalp me :(

Tech Musings