Experts,
Is there any of you guys who has successfully built and deployed Orchard CMS (1.1 and above) in Azure?
I've tried to build the source codes (pulled from Codeplex repo) as suggested here: http://www.orchardproject.net/docs/Deploying-Orchard-to-Windows-Azure.ashx but keep on failing. If you see the comments of that article, you'll see some people are having the same problem with the ClickToBuildAzurePackage.cmd. It fails all the time!! It's not working at all!
Next, I downloaded the source codes package (Orchard.Web.1.2.41.zip) and tried to open the Orchard.Azure solution, build, and publish it (with remote desktop connection configured). I've also put in the correct DataConnectionString in the ServiceConfiguration.cscfg file before publishing it. It gave me a yellow screen of death with this message:
None of the constructors found with policy 'Autofac.Core.Activators.Reflection.BindingFlagsConstructorFinder'
Next, I tried to deploy the Azure package only (without source codes, Orchard.Azure.1.2.41.zip). This time, I could get the installation screen but then after setup was done, it gave me another yellow screen of death with several error messages that basically remind me to give proper permission for Media, Themes, Modules, and some other folders....How do I do that if I can't even setup the remote desktop connection for Azure as mentioned in the above?
I'm giving up on this...I start to think Orchard CMS (1.1 and above) is not ready for Azure. I could get the 1.0.2 version up and running in Azure (directly deployed the Azure-ready package, I didn't build the source codes).
Can anybody share their experience on this matter and the step-by-step guideline to get Orchard CMS (1.1 and above) running smoothly in Azure? May I know if we can also setup 2 instances in Azure for Orchard CMS? What are the things I need to consider / do to achieve that?
Thanks!
I didn't get ClickToBuildToAcure.cmd script to work and that is why I wrote my own one, that Stuart helped linking to. My blog http://litemedia.info is running on Azure and those blog posts describes how I did it.
Some pointers
My Global.asax.cs looks a bit different on Azure compared to running local.
public class AzureApplication : HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
}
protected void Application_Start()
{
CloudStorageAccount.SetConfigurationSettingPublisher(
(configName, configSetter) =>
configSetter(RoleEnvironment.GetConfigurationSettingValue(configName))
);
// For information on handling configuration changes
// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
RoleEnvironment.Changing += (sender, e) =>
{
// If a configuration setting is changing
if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange))
{
// Set e.Cancel to true to restart this role instance
e.Cancel = true;
}
};
RegisterRoutes(RouteTable.Routes);
Starter.LaunchStartupThread(MvcSingletons);
}
protected void Application_BeginRequest()
{
Context.Items["originalHttpContext"] = Context;
Starter.OnBeginRequest(Context, MvcSingletons);
}
protected void Application_EndRequest()
{
Starter.OnEndRequest();
}
static void MvcSingletons(ContainerBuilder builder)
{
builder.Register(ctx => RouteTable.Routes).SingleInstance();
builder.Register(ctx => ModelBinders.Binders).SingleInstance();
builder.Register(ctx => ViewEngines.Engines).SingleInstance();
}
}
I had problems deploying with sites in /App_Data/ directory. Make sure that it is empty when you upload your package to Azure.
You need to tell Autofac to use some Azure specific classes for settings and blog storage. You'll find these in /Config/Host.config and /Config/Sites.config. Go to my blog post above to see how I set them up.
I spent several hours hunting down assemblies that was not copied to the Azure package. Make sure that all references are "Copy Local", even the MVC3 ones.
Really make sure that you have the correct DataConnectionString setup in ServiceConfiguration.cscfg. I was banging my head against the wall for a long time because I had put a connection string for another account there.
If you intend to deploy from a script you need to setup a certificate that will be used for the deployment. I used Visual Studio to create the certificate, and then only reference it from my script.
Good luck!