Я использую AzureRubyRails sln, который является WorkerRole, расширяющим класс RoleEntryPoint.Я заметил, что мое приложение достигает определенной точки (непосредственно перед копированием), и затем Azure решает перезапустить роль без объяснения причин в журнале таблиц.Возможно ли, что я превышаю свой лимит времени в OnStart?
public override bool OnStart()
{
try
{
LogInfo("Worker Role OnStart Entered");
RoleEnvironment.Changing += RoleEnvironmentChanging;
DiagnosticMonitorConfiguration dmc = DiagnosticMonitor.GetDefaultInitialConfiguration();
dmc.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
dmc.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
DiagnosticMonitor.Start("DiagnosticsConnectionString", dmc);
this.roleId = RoleEnvironment.CurrentRoleInstance.Id;
string outputContainer = RoleEnvironment.GetConfigurationSettingValue("OutputContainer");
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("StorageAccount"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
this.container = blobClient.GetContainerReference(outputContainer);
this.container.CreateIfNotExist();
BlobContainerPermissions permissions = this.container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
this.container.SetPermissions(permissions);
//Get the local Storage resources
LocalResource disk = RoleEnvironment.GetLocalResource("App");
//Copy files across (log files and database are writeable)
DirectoryInfo localStorageRoot = new DirectoryInfo(disk.RootPath);
//Get the root of this role
this.roleRoot = System.Environment.GetEnvironmentVariable("RoleRoot");
this.roleRoot += "\\approot";
try
{
LogInfo("Starting Git extract");
var proc = new Process
{
StartInfo = new ProcessStartInfo(string.Format("{0}\\Ruby\\7za.exe", this.roleRoot), "x -oGit -y Git.7z")
{
UseShellExecute = false,
WorkingDirectory = string.Format("{0}\\Ruby", this.roleRoot)
},
EnableRaisingEvents = true
};
proc.Start();
proc.WaitForExit();
}
catch (Exception fErr)
{
LogError(fErr.Message);
}
try
{
LogInfo("Starting Git clone");
var proc = new Process
{
StartInfo = new ProcessStartInfo(string.Format("{0}\\Ruby\\git\\bin\\git.exe", this.roleRoot), string.Format("clone git://github.com/callumj/InPerthAzure.git web_app", this.roleRoot))
{
UseShellExecute = false,
WorkingDirectory = string.Format("{0}\\Ruby", this.roleRoot)
},
EnableRaisingEvents = true
};
proc.Start();
proc.WaitForExit();
}
catch (Exception fErr)
{
LogError(fErr.Message);
}
string rubyFolderName = RoleEnvironment.GetConfigurationSettingValue("RubyFolder");
this.rubyLocation = string.Format("{0}\\{1}", localStorageRoot.FullName, rubyFolderName);
string rubySrc = string.Format("{0}\\{1}", this.roleRoot, rubyFolderName);
try
{
LogInfo("Starting Ruby extraction");
var proc = new Process
{
StartInfo = new ProcessStartInfo(Path.Combine(rubySrc, @"Ruby"))
{
UseShellExecute = false,
WorkingDirectory = rubySrc
},
EnableRaisingEvents = true
};
proc.Start();
proc.WaitForExit();
}
catch (Exception fErr)
{
LogError(fErr.Message);
}
LogInfo("Beginning copy");
CopyFolder(string.Format("{0}\\{1}", this.roleRoot, rubyFolderName), this.rubyLocation);
string appFolderName = RoleEnvironment.GetConfigurationSettingValue("AppFolder");
this.appLocation = string.Format("{0}\\{1}", localStorageRoot.FullName, appFolderName);
//CopyFolder(string.Format("{0}\\{1}", this.roleRoot, appFolderName), this.appLocation);
string memcacheFolderName = RoleEnvironment.GetConfigurationSettingValue("MemcacheFolder");
this.memcacheLocation = string.Format("{0}\\{1}", localStorageRoot.FullName, memcacheFolderName);
//Get the local endpoint
LogInfo("Acquiring endpoint");
this.endPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Server"].IPEndpoint;
// Start the server
LogInfo("Beginning bootup");
BootApp();
LogInfo("Worker Role OnStart Exited");
}
catch (Exception err)
{
LogError(err.Message);
}
return base.OnStart();
}
Я считаю, что он хорошо работает на моем локальном эмуляторе вычислений разработчика (но я предполагаю, что это не так много значит).