Hangfire 没有活跃的服务器
Hangfire has no active servers
发布 ASP MVC 应用程序后,Hangfire Dashboard 表示它没有活动服务器。尝试重新启动、重建、删除数据库中的 Hangfire 表 - 没有成功。
OWIN 启动 class:
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.MapSignalR();
GlobalConfiguration.Configuration
.UseSqlServerStorage(@"HangfireStorage");
var options = new BackgroundJobServerOptions
{
Queues = new[] { "critical", "default" }
};
app.UseHangfireServer(options);
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
AuthorizationFilters = new[] { new MyRestrictiveAuthorizationFilter() }
});
var hangfireUpdatingCron = ConfigurationManager.AppSettings["HangfireUpdatingPlayersCron"];
var hangfireUpdatingLeagueMatchesCron = ConfigurationManager.AppSettings["HangfireUpdatingLeagueMatchesCron"];
BackgroundJob.Enqueue(() => SteamParser.ResetAllUpdatings());
BackgroundJob.Enqueue(() => SteamParser.UpdateAllPlayers());
RecurringJob.AddOrUpdate(() => SteamParser.UpdateAllPlayers(), hangfireUpdatingCron);
RecurringJob.AddOrUpdate(() => SteamParser.UpdateLeagueMatches(), hangfireUpdatingLeagueMatchesCron);
}
}
好的,现在为我工作。也许你的情况有类似的解决方案。转述我对 issue 的更新:
我的问题具体在于我在同一应用程序池中 运行 多个应用程序,因此默认的 "machinename:PID" 命名方案不是唯一的。但是每个应用程序都指向自己单独的数据库。因此,在 startup/deploy 上进行了一场比赛,只有一个应用程序获得了单曲 BackgroundJobServer
的所有权。但是没有记录错误;一切看起来都很好。
答案在docs中:"Since the defaults values provide uniqueness only on a process level, you should to handle it manually, if you want to run different server instances inside the same process"
但重要的一点是,这种情况包括同一个应用程序池下的多个应用程序运行,这是一个单一的进程。
此外,当我尝试实施文档中建议的更改时(设置唯一 BackgroundJobServerOptions.ServerName
),由于 this comment 中提到的最大长度问题而出错。我的解决方案是使用比 GUID 更短的东西来保证唯一性。就我而言,我使用了应用程序的名称。
这对我有帮助:
在 OWIN Startup class 中,我添加了 BackgroundJobServerOptions with ServerName:
var options = new BackgroundJobServerOptions
{
Queues = new[] { "critical", "default" },
ServerName = "Hangfire:1"
};
Hi there! Background job server instances now (since 1.5.0-beta1) use
GUID-based unique identifiers for each instance, so there is no need
to set any magic server names.
参考:https://github.com/HangfireIO/Hangfire/issues/223
我的问题只是在 hangfire 出现授权问题后被遗忘的一行代码。
我刚刚忘了补充:
app.UseHangfireServer();
显然仪表板已初始化
app.UseHangfireDashboard('/hangfire', someOptions);
但是服务器不是 运行。
想出一个该死的新问题(hangfire...),所以要解决这个问题。
希望对您有所帮助。
发布 ASP MVC 应用程序后,Hangfire Dashboard 表示它没有活动服务器。尝试重新启动、重建、删除数据库中的 Hangfire 表 - 没有成功。 OWIN 启动 class:
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.MapSignalR();
GlobalConfiguration.Configuration
.UseSqlServerStorage(@"HangfireStorage");
var options = new BackgroundJobServerOptions
{
Queues = new[] { "critical", "default" }
};
app.UseHangfireServer(options);
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
AuthorizationFilters = new[] { new MyRestrictiveAuthorizationFilter() }
});
var hangfireUpdatingCron = ConfigurationManager.AppSettings["HangfireUpdatingPlayersCron"];
var hangfireUpdatingLeagueMatchesCron = ConfigurationManager.AppSettings["HangfireUpdatingLeagueMatchesCron"];
BackgroundJob.Enqueue(() => SteamParser.ResetAllUpdatings());
BackgroundJob.Enqueue(() => SteamParser.UpdateAllPlayers());
RecurringJob.AddOrUpdate(() => SteamParser.UpdateAllPlayers(), hangfireUpdatingCron);
RecurringJob.AddOrUpdate(() => SteamParser.UpdateLeagueMatches(), hangfireUpdatingLeagueMatchesCron);
}
}
好的,现在为我工作。也许你的情况有类似的解决方案。转述我对 issue 的更新:
我的问题具体在于我在同一应用程序池中 运行 多个应用程序,因此默认的 "machinename:PID" 命名方案不是唯一的。但是每个应用程序都指向自己单独的数据库。因此,在 startup/deploy 上进行了一场比赛,只有一个应用程序获得了单曲 BackgroundJobServer
的所有权。但是没有记录错误;一切看起来都很好。
答案在docs中:"Since the defaults values provide uniqueness only on a process level, you should to handle it manually, if you want to run different server instances inside the same process"
但重要的一点是,这种情况包括同一个应用程序池下的多个应用程序运行,这是一个单一的进程。
此外,当我尝试实施文档中建议的更改时(设置唯一 BackgroundJobServerOptions.ServerName
),由于 this comment 中提到的最大长度问题而出错。我的解决方案是使用比 GUID 更短的东西来保证唯一性。就我而言,我使用了应用程序的名称。
这对我有帮助: 在 OWIN Startup class 中,我添加了 BackgroundJobServerOptions with ServerName:
var options = new BackgroundJobServerOptions
{
Queues = new[] { "critical", "default" },
ServerName = "Hangfire:1"
};
Hi there! Background job server instances now (since 1.5.0-beta1) use GUID-based unique identifiers for each instance, so there is no need to set any magic server names.
参考:https://github.com/HangfireIO/Hangfire/issues/223
我的问题只是在 hangfire 出现授权问题后被遗忘的一行代码。
我刚刚忘了补充:
app.UseHangfireServer();
显然仪表板已初始化
app.UseHangfireDashboard('/hangfire', someOptions);
但是服务器不是 运行。
想出一个该死的新问题(hangfire...),所以要解决这个问题。
希望对您有所帮助。