Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Publishing web app to Azure Websites Staging deployment slot fails with webjob

I just created a new deployment slot for my app, imported the publishing profile to Visual Studio, but after deployment I get this error message:

Error 8: An error occurred while creating the WebJob schedule: No website could be found which matches the WebSiteName [myapp__staging] and WebSiteUrl [http://myapp-staging.azurewebsites.net] supplied.

I have 2 webjobs, a continuous and a scheduled webjob.

I already signed in to the correct Azure account, as stated by this answer.

Will I need to set something else up in order to deploy my app to a staging Deployment Slot with webjobs?

My app is using ASP.NET, if it makes a difference?

like image 820
Jeff Avatar asked Feb 08 '23 15:02

Jeff


2 Answers

There are a few quirks when using the Azure Scheduler. The recommendation is to use the new CRON support instead. You can learn more about it here and here.

like image 142
David Ebbo Avatar answered Apr 27 '23 22:04

David Ebbo


Jeff,

As David suggested, you can/should migrate to the new CRON support. Here's an example. The WebJob will be deployed as a continuous WebJob.

Keep in mind that in order to use this you need to install the WebJobs package and extensions that are currently a prerelease. You can get them on Nuget.

Install-Package Microsoft.Azure.WebJobs -Pre Install-Package Microsoft.Azure.WebJobs.Extensions -Pre

Also, as David suggested if you're not using the WebJobs SDK, you can also run this using a settings.job file. He provided an example here.

Program.cs

static void Main()
{
    //Set up DI (In case you're using an IOC container)
    var module = new CustomModule();
    var kernel = new StandardKernel(module);

    //Configure JobHost
    var storageConnectionString = "your_connection_string";
    var config = new JobHostConfiguration(storageConnectionString) { JobActivator = new JobActivator(kernel) };
    config.UseTimers(); //Use this to use the CRON expression.

    //Pass configuration to JobJost
    var host = new JobHost(config);
    // The following code ensures that the WebJob will be running continuously
    host.RunAndBlock();
}

Function.cs

public class Functions
{
    public void YourMethodName([TimerTrigger("00:05:00")] TimerInfo timerInfo, TextWriter log)
    {
        //This Job runs every 5 minutes. 
        //Do work here. 
    }
}

You can change the schedule in the TimerTrigger attribute.

UPDATE Added the webjob-publish-settings.json file

Here's an example of the webjob-publiss-settings.json

{
  "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
  "webJobName": "YourWebJobName",
  "startTime": null,
  "endTime": null,
  "jobRecurrenceFrequency": null,
  "interval": null,
  "runMode": "Continuous"
}
like image 41
lopezbertoni Avatar answered Apr 27 '23 23:04

lopezbertoni