Upgrade Version Hell
I currently have a SF 5.1 site. Everything has been running reasonably well and I've been putting off upgrades using the "if it ain't broke..." philosophy. Now I'm looking at upgrading to 6.0 sp1. The upgrade docs indicate I must upgrade from 5.1>5.2, 5.2>5.4, and finally 5.4>6.0 sp1.
SF if the only product I use that requires this level of version-by-version upgrade procedure. Upgrading from one version is already a painfully time consuming process. Having to perform 3 upgrades to get to the most recent version is crazy. The upgrade->test->deploy process usually sucks up the better part of a day. Having to do it multiple times just plain sucks.
Is there any plan in the works to make upgrades a more reasonable process?
Steve
+1 SteveV, several of us feel you. See here:
www.sitefinity.com/.../start-fresh-with-sf-5-4-but-bring-published-content-from-sf-5-1-w-o-upgrading-
The Sitefinity team may be looking at this, at least I hope.
Gregory
Hi Gregory,
This is a good start and I added my vote in PITS but it really doesn't address the required incremental upgrades issue. Imagine if Microsoft did this with their operating systems--most of us would still be running Windows 95 (or gasp 3.1). Frankly, I can't imagine that this helps Telerik's business. If I were running 4.X and was considering purchasing an upgrade only to find out the crazy number of incremental upgrades I had to do to get to 6.X, I might very well look at another product--certainly not in Telerik's interest to have customer doing that.
Steve
It's not that big of a deal, and certainly way easier than a 3.x upgrade. Imagine if instead of a bin file to update you had to windiff individual files on the entire webroot (yeah, that was the 3.x upgrade process).
It should just be as easy as:
1) Drop in Bin\ClientBin\Sitefinity folders
2) Build, run
3) Drop in Bin\ClientBin\Sitefinity folders
4) Build, run
...
5) Use the latest _EmptyProject Webconfig
6) Validate
I can do 5+ sites in a couple hours, I rarely encounter issues after an upgrade certainly nothing where I don't feel like I can just do it on a whim quickly.
If you have to go the latest anyway, why bother validating after EVERY upgrade...what if you encounter a bug which is fixed a couple versions later
Also that's the *safe cover our asses* upgrade path...if you do a backup you can likely just skip multiple versions (like 5.1-6.0)
Steve, what do you mean by this line: Also that's the *safe cover our asses* upgrade path...if you do a backup you can likely just skip multiple versions (like 5.1-6.0)?
My site is at 5.1 right now. Are you saying there's a way for me to go straight to 6.0 SP1 w/o the upgrades in between? If so, would you please share that pearl of wisdom?
Many thanks in advance,
Gregory
Maybe I'm doing it wrong. I generally do the upgrades on my development machine, build, run, fix any problems, test, and deploy all of the files except the config files to my live server.
Next, I log into the live site's SF backend which triggers the database upgrade for that version. Next, I confirm everyting works as expected and repeat the process for each upgrade.
If there's a simpler method I'd love to hear about it.
Just upgraded from 5.1 to 5.2. Now I get this compilation error:
Error 63 Could not load file or assembly
'Telerik.OpenAccess.35.Extensions, Version=2012.2.628.2, Culture=neutral, PublicKeyToken=7ce17eeaf1d59342'
or one of its dependencies. General Exception (Exception from HRESULT: 0x80131500)
ExceptionString:
System.IO.FileLoadException: Could not load file or assembly
'Telerik.OpenAccess.35.Extensions, Version=2012.2.628.2, Culture=neutral, PublicKeyToken=7ce17eeaf1d59342'
or one of its dependencies. General Exception (Exception from HRESULT: 0x80131500)
File name:
'Telerik.OpenAccess.35.Extensions, Version=2012.2.628.2, Culture=neutral, PublicKeyToken=7ce17eeaf1d59342'
---> System.Exception: The referenced assembly
'C:\Program Files (x86)\Telerik\Sitefinity 4.3\Projects\NLG Sitefinity Site\NLG Sitefinity Site\bin\Telerik.OpenAccess.35.Extensions.dll'
has the wrong version; expected Version=2012.2.628.2 but found Version=2012.3.1012.1.
at Telerik.OpenAccess.SPI.AssemblyProvider.LoadFromReferences(String assemblyName)
at Telerik.OpenAccess.SPI.AssemblyProvider.RefResolveEventHandler(Object sender, ResolveEventArgs args)
at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)
at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName)
at Telerik.OpenAccess.Sdk.Enhancer.Enhancer.CrossDomainRunImpl(AssemblyLoader assemblyLoader)
at Telerik.OpenAccess.Sdk.Enhancer.EnhancerBase.CrossDomainRun()
C:\Program Files (x86)\Telerik\Sitefinity 4.3\Projects\NLG Sitefinity Site\NLG Sitefinity Site\obj\Debug\SitefinityWebApp.dll NLGSitefinityWebApp
Hello Steve,
Please note that the received exception indicates that the current version of Telerik OpenAccess that your Sitefinity project references does not match the one that the Sitefinity assemblies have been built with. Alternatively if you have a custom module that has a persistent model and needs to be enhanced, it could be that the OpenAccess version your targets file points to is also different than the one the current Sitefinity assemblies have been built with.
Each Sitefinity project manager creates an _EmptyProject folder, which contains the defualt project files for a Sitefintiy project of that version. In the /bin folder inside this _EmptyProject folder you can find the Telerik OpenAccess assemblies which are used by the corresponding Sitefinity version, and can reference them in your current project, as this way you're ensuring that the proper version fof these assmeblies ar eused by your project (instead of referencing them from GAC, fro example, which will pull the currently installed OpenAccess version on the machine).
If you have a custom module that has a persistent model and needs to be enhanced, you need to change the location of the targets file as well. To obtain the correct targets and enhancer for the particular Sitefinity version, you can download the Sitefinity SDK for that version. You can find all available SDK version in your account here.
Regards,
Boyan Barnev
Telerik
Hi Boyan,
I do have a number of custom modules that use persistance but they are all part of the main project. I don't have any modules in seperate assemblies so all of the modules are using the same OpenAccess references. I had already downloaded the SF 5.2 SDK before I posted. My project file is using the following path for the OpenAccess.targets:
<Import Condition=
"Exists('$(MSBuildExtensionsPath)\OpenAccess.targets')"
Project=
"$(MSBuildExtensionsPath)\OpenAccess.targets"
/>
<OpenAccessPath Condition=
"'$(OpenAccessPath)'==''"
>C:\Program Files (x86)\Telerik\OpenAccess ORM\</OpenAccessPath>
I got it to work by screwing with the "OpenAccessPath" and "EnhancerAssembly" values in the OpenAccess.targets file. Original values were:
<OpenAccessPath Condition=
"'$(OpenAccessPath)'==''"
>C:\Program Files (x86)\Telerik\OpenAccess ORM\</OpenAccessPath>
<EnhancerAssembly Condition=
"'$(EnhancerAssembly)'==''"
>$(OpenAccessPath)\sdk\enhancer.exe</EnhancerAssembly>
<OpenAccessPath Condition=
"'$(OpenAccessPath)'==''"
>C:\Program Files (x86)\Telerik\Sitefinity 5.2\SDK\Content\Common\Dependencies\</OpenAccessPath>
<EnhancerAssembly Condition=
"'$(EnhancerAssembly)'==''"
>$(OpenAccessPath)\sdk\enhancer.exe</EnhancerAssembly>
Insert of '1567185022-d9b4ccf1-aaf7-402f-8572-ce6a90721eb4' failed: Telerik.OpenAccess.RT.sql.SQLException: Cannot insert the value NULL into column 'temp_column_a', table 'NLGSitefinity.dbo.sf_permissions'; column does not allow nulls. INSERT fails. The statement has been terminated. at Telerik.OpenAccess.RT.Adonet2Generic.Impl.PreparedStatementImp.execute() at OpenAccessRuntime.Relational.conn.PooledPreparedStatement.execute() at OpenAccessRuntime.Relational.RelationalStorageManager.generateInserts(NewObjectOID oid, Int32 index, ClassMetaData cmd, PersistGraph graph, Int32[] fieldNos, CharBuf s, Object[] oidData, IntArray toUpdateIndexes) INSERT INTO [sf_permissions] ([id], [app_name], [deny], [grnt], [last_modified], [object_id], [principal_id], [set_name], [voa_version]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) (set event logging to all to see parameter values) Telerik.OpenAccess.RT.sql.SQLException: Cannot insert the value NULL into column 'temp_column_a', table 'NLGSitefinity.dbo.sf_permissions'; column does not allow nulls. INSERT fails. The statement has been terminated. at Telerik.OpenAccess.RT.Adonet2Generic.Impl.PreparedStatementImp.execute() at OpenAccessRuntime.Relational.conn.PooledPreparedStatement.execute() at OpenAccessRuntime.Relational.RelationalStorageManager.generateInserts(NewObjectOID oid, Int32 index, ClassMetaData cmd, PersistGraph graph, Int32[] fieldNos, CharBuf s, Object[] oidData, IntArray toUpdateIndexes)
Hello Steve,
I'm glad to hear that the provided information has pointed you in the right direction for resolving the problem.
The current issue you're experiencing indicates a possible failed upgrade script, wehre the temporary column has nod been dropped during the execution of the upgrade scripts. The most probable cause for the failed upgrade script is the exception that has occurred during the upgrade (due to the incorrect OA version). Our best practices recommendation would be to attempt at goign through the upgrade process again, but this time, please configure the project to point to the correct version fo telerik.OpenAccess prior to starting the web site after the upgrade, and let us know if any issues persist.
Regards,
Boyan Barnev
Telerik
Unfortunately, I continue to encounter one problem after another and a full week after starting the 5.1>5.2 upgrade I still don't have 5.2 working on my dev system.
After sorting out the erroneous database table column issue I discovered that my 5.2 license was missing the Ecommerce module. After, two emails to sales@sitefinity.com in two days, both of which went unanswered, my support ticket was updated indicating that the license was updated. Two full days lost due to a stupid oversight on someone's part while entering my license info.
With the license issue resolved, I set out to test the site on my local machine before publishing the changes to my production server. Five minutes later I was already dead in the water: Adding an item to the shopping cart results in a div message with the following:
This item cannot be added to your shopping cart at this time.
----------------------------------------
Timestamp: 5/31/2013 8:02:09 PM
Message: HandlingInstanceID: 6fe85e4c-3d38-45b1-927a-cd623c53d628
An exception of type 'System.ArgumentException' occurred and was caught.
------------------------------------------------------------------------
05/31/2013 16:02:09
Type : System.ArgumentException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Invalid type specified Telerik.Sitefinity.Modules.Ecommerce.Catalog.CatalogDataProviderBase
Source : Telerik.Sitefinity
Help link :
ParamName :
Data : System.Collections.ListDictionaryInternal
TargetSite : TProviderBase InstantiateProvider(Telerik.Sitefinity.Configuration.IDataProviderSettings, System.Type, Telerik.Sitefinity.Abstractions.ExceptionPolicyName, Telerik.Sitefinity.Data.ManagerBase`1[TProviderBase])
Stack Trace : at Telerik.Sitefinity.Data.ManagerBase`1.InstantiateProvider(IDataProviderSettings providerSettings, Type providerType, ExceptionPolicyName policy, ManagerBase`1 manager)
Additional Info:
MachineName : STEVE4
TimeStamp : 5/31/2013 8:02:09 PM
FullName : Telerik.Sitefinity.Utilities, Version=5.2.3800.0, Culture=neutral, PublicKeyToken=b28c218413bdf563
AppDomainName : /LM/W3SVC/1/ROOT/NLGSitefinityWebApp-1-130145041017573328
ThreadIdentity : svibert
WindowsIdentity : IIS APPPOOL\NLGSiteFinity
Category: ErrorLog
Priority: 0
EventId: 9010
Severity: Warning
Title:Enterprise Library Exception Handling
Machine: STEVE4
App Domain: /LM/W3SVC/1/ROOT/NLGSitefinityWebApp-1-130145041017573328
ProcessId: 9136
Process Name: c:\windows\system32\inetsrv\w3wp.exe
Thread Name:
Win32 ThreadId:6984
Extended Properties:
----------------------------------------
Hi Steve,
I hope you are doing well today.
We would need a copy of your project to investigate. Can you please open a support ticket and submit your project to us?
Thank you.
Regards,
Patrick Dunn
Telerik
Hi Patrick,
Thanks for the reply. I already have a ticket open and uploaded my project and database on Monday morning. I received a reply this morning from tech support indicating that there was a column named "title" (not to be confused with "title_") in the sf_ec_cart_detail table that shouldn't be there and should be deleted.
I deleted the column and that did solve the "This item cannot be added to your shopping cart at this time." problem. But now I get the following error when I begin checkout:
Server Error in '/NLGSitefinityWebApp' Application.
--------------------------------------------------------------------------------
A required control was not found in the template for "~/SfCtrlPresentation/OpenAccessDataProvider,71cc734324a940e586291c2cec50e9ca.ascx". The control must be assignable from type "System.Web.UI.ITextControl" and must have ID "stateProvinceData".
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: Telerik.Sitefinity.Web.UI.TemplateException: A required control was not found in the template for "~/SfCtrlPresentation/OpenAccessDataProvider,71cc734324a940e586291c2cec50e9ca.ascx". The control must be assignable from type "System.Web.UI.ITextControl" and must have ID "stateProvinceData".
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[TemplateException: A required control was not found in the template for "~/SfCtrlPresentation/OpenAccessDataProvider,71cc734324a940e586291c2cec50e9ca.ascx". The control must be assignable from type "System.Web.UI.ITextControl" and must have ID "stateProvinceData".]
Telerik.Sitefinity.Web.UI.GenericContainer.ThrowException(Type requiredType, String controlId) +74
Telerik.Sitefinity.Web.UI.GenericContainer.GetControl(String id, Boolean required) +262
Telerik.Sitefinity.Modules.Ecommerce.Orders.Web.UI.CheckoutViews.ShippingAndBillingInformation.InitializeControls(GenericContainer container) +680
Telerik.Sitefinity.Web.UI.SimpleView.CreateChildControls() +82
System.Web.UI.Control.EnsureChildControls() +182
System.Web.UI.Control.PreRenderRecursiveInternal() +60
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4201
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.551
Hello Steve,
It seems like something may have gone wrong during the upgrade process for the database. Considering how many changes were made to the database in 6.0 for ecommerce it seems fair to reason that this would be the cause. As for resolving the issues we have to approach them 1 by 1 but a best solution - if possible - would be to try the upgrade process again and confirm that the tables were updated correctly.
With ecommerce having so many changes made it is also important to read over the breaking changes.
http://www.sitefinity.com/documentation/documentationarticles/developers-guide/changes-and-backward-compatibility/breaking-changes-in-sitefinity-6-0/sitefinity-6-0-ecommerce-breaking-changes
The error you receive now is because a portion of your checkout control does not have "stateProvinceData" control ID. It is required. You can download all of the 6.0 templates in the SDK and then use them in your site as they will have all the required controls. This error will specifically show up if you are using an external template and have not updated it with the latest control requirements.
Hi Patrick,
Note that I'm currently upgrading to 5.2 in hopes that I might someday make enough progress to actually get to version 6.0. I am in fact using a custom template but you should note that there is no mention of changes to ecommerce templates in the 5.2 breaking changes document.
Regards -- Steve
Hi Steve,
The template that needs this control is the ShippingAndBillingInformation step of the checkout control. Please check your template and ensure that this control is there somewhere:
<
asp:Label
ID
=
"stateProvinceData"
CssClass
=
"sfstateProvinceData"
style
=
"display:none;"
runat
=
"server"
/>
Hi Patrick,
That did it--thanks.
Steve