【发布时间】:2021-02-23 15:32:26
【问题描述】:
2020-11-11T15:57:56.534313+00:00 heroku[web.1]:错误 R10(启动 timeout) -> Web 进程未能在 60 秒内绑定到 $PORT 启动 2020-11-11T15:57:56.552989+00:00 heroku[web.1]:停止 使用 SIGKILL 2020-11-11T15:57:56.622618+00:00 处理 heroku[web.1]:进程以状态 137 退出 2020-11-11T15:57:56.669934+00:00 heroku[web.1]:状态从 开始崩溃
在 heroku 我的 .NET Core 控制台应用程序上部署几分钟后,我收到此错误,如何解决?
有我的 Program.cs
internal class Program
{
private static async Task Main(string[] args)
{
var host = GetHost(args);
await ConfigureVkAuth(host);
host.Services.GetRequiredService<VkService>();
host.Services.GetRequiredService<PostMessage>();
host.Services.GetRequiredService<MyContext>();
await host.RunAsync();
}
private static IHost GetHost(string[] args) =>
new HostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration(b => b.AddCommandLine(args))
.ConfigureAppConfiguration((c, b) =>
{
b.AddJsonFile("appsettings.json", true, true);
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
.ConfigureServices((context, services) =>
{
ConfigureMain(context, services);
ConfigureBot(services);
ConfigureVK(services);
services.InstallServicesInAssembly();
})
.Build();
private static void ConfigureMain(HostBuilderContext context, IServiceCollection services)
{
services.Configure<DataOptions>(opts =>
context.Configuration.GetSection(nameof(DataOptions)).Bind(opts));
services.Configure<BotOptions>(opts =>
context.Configuration.GetSection(nameof(BotOptions)).Bind(opts));
services.Configure<ApiAuthParams>(opts =>
{
context.Configuration.GetSection(nameof(VkApiAuthParams)).Bind(opts);
opts.Settings = Settings.All;
});
}
private static void ConfigureBot(IServiceCollection services)
{
services.AddHttpClient<ITelegramBotClient, TelegramBotClient>()
.AddTransientHttpErrorPolicy(builder =>
builder.WaitAndRetryAsync(3, _ => TimeSpan.FromSeconds(5d)));
services.AddSingleton<ITelegramBotClient, TelegramBotClient>(provider =>
new TelegramBotClient(provider.GetRequiredService<IOptions<BotOptions>>().Value.Token,
provider.GetRequiredService<IHttpClientFactory>().CreateClient(nameof(ITelegramBotClient))));
services.TryAddTransient(s =>
s.GetRequiredService<IHttpClientFactory>().CreateClient(string.Empty));
services.AddTransient<PostPhoto>();
}
private static void ConfigureVK(IServiceCollection services)
{
services.AddSingleton<IVkApi, VkApi>(provider =>
new VkApi(provider.GetRequiredService<ILogger<VkApi>>()));
services.AddSingleton<VkService>();
services.AddTransient<PostMessage>();
}
private static async Task ConfigureVkAuth(IHost host)
{
var vk = host.Services.GetRequiredService<IVkApi>();
var credentials = host.Services.GetRequiredService<IOptions<ApiAuthParams>>().Value;
await vk.AuthorizeAsync(credentials);
}
【问题讨论】:
-
不幸的是,我有控制台应用程序,其中还包含服务人员。我没有 Webhost,但有 IHost
标签: heroku .net-core deployment console-application