gpt4 book ai didi

c# - 使用 docker 将 microsoft bot 框架部署到 heroku 时出现问题

转载 作者:行者123 更新时间:2023-12-02 21:04:57 30 4
gpt4 key购买 nike

我是 Docker 和 C# 新手,正在尝试使用 Docker 将 microsoft bot 框架部署到 Heroku

我正在使用这个预先构建的示例:

https://github.com/microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/13.core-bot 我已使用正确的 Luis 凭据更新了应用程序设置。我使用此端点创建了一个 azure 机器人服务:https://mybotfram.herokuapp.com/api/messages

Then i updated the bot service credential in the app setting json. 

{
"MicrosoftAppId": "****************************************",
"MicrosoftAppPassword": "********************",
"LuisAppId": "********************",
"LuisAPIKey": "********************",
"LuisAPIHostName": "westus.api.cognitive.microsoft.com"
}

我的文件夹看起来是这样的:

enter image description here

然后到正确的文件夹:

heroku container:login
heroku create myrepeat
heroku container:push web --app mybotfram
heroku container:release web --app mybotfram

我的 Dockerfile 如下所示:


FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY ./*.csproj .
RUN dotnet restore

# copy everything else and build app
COPY ./. .
WORKDIR /app
RUN dotnet publish -c Release -o out


FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime
WORKDIR /app
# COPY ./*.bot ./
COPY --from=build /app/out ./
ENTRYPOINT ["dotnet", "CoreBot.dll"]

端点无法工作,我在 Heroku 日志中收到此错误,似乎没有任何东西可以正常工作。

2019-10-30T15:23:32.220067+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=POST path="/api/messages" host=mybotfram.herokuapp.com request_id=edda2c79-ab2e-4258-8a17-38a145f06f06 fwd="13.94.246.37" dyno= connect= service= status=503 bytes= protocol=https
2019-10-30T15:25:52.90006+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=POST path="/api/messages" host=mybotfram.herokuapp.com request_id=387e5fcf-7330-45f9-8751-d3c156618565 fwd="13.94.246.37" dyno= connect= service= status=503 bytes= protocol=https
2019-10-30T15:33:14.734976+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=mybotfram.herokuapp.com request_id=5b7a5fe7-9371-4911-a563-d3aeba8411c4 fwd="84.101.210.119" dyno= connect= service= status=503 bytes= protocol=https
2019-10-30T15:33:14.383936+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/api/messages" host=mybotfram.herokuapp.com request_id=75836fb3-afca-4725-9b00-1ffcdec0e2a1 fwd="84.101.210.119" dyno= connect= service= status=503 bytes= protocol=https

正如我所提到的,我对此很陌生,因此对上述内容的任何见解将不胜感激!

<小时/>

________________________________________编辑__________________________________

<小时/>

在回答 Mdrichardson 后进行编辑(非常感谢!)。

这是我根据您的输入重写 Program.cs 的方式。

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
using System;

namespace Microsoft.BotBuilderSamples
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args)
.UseKestrel()
.UseUrls("http://0.0.0.0:" + Environment.GetEnvironmentVariable("PORT"))
.Build()
.Run();
}


public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((logging) =>
{
logging.AddDebug();
logging.AddConsole();
})
.UseStartup<Startup>();
}
}

最佳答案

本节下面有完整的操作方法

特别适合您:

503 错误通常表示您的客户端无法与机器人通信。

我的猜测是您需要更新您的 Program.cs包含这个:

public static void Main(string[] args)
{
CreateWebHostBuilder(args)
.UseKestrel()
.UseUrls("http://0.0.0.0:" + Environment.GetEnvironmentVariable("PORT"))
.Build()
.Run();
}

Heroku 通过 PORT 提供公开端口环境变量。您的机器人只需要监听即可。

如果这对您不起作用,我建议从头开始并按照下面的教程进行操作

<小时/>

从头开始让这个工作起来。

如何 Docker 化您的机器人并部署到 Heroku

这大部分功劳应该归功于 Victor Reyes for this article ,因为我基本上做了同样的事情,但是使用了机器人。

以下教程将涵盖基础知识,并假设您了解一些有关开发机器人的知识。有关 Docker/Heroku 方面的更多详细信息,请参阅文章和 our official docs对于机器人方面的事情。

1.下载 CoreBot .

2.更新appsettings.json包含您的机器人和 LUIS 信息。

3. 在本地运行应用程序并验证它是否可以在 Emulator 。这 测试您的机器人是否正常工作。

4. 在根文件夹中使用 .csproj 创建一个 dockerfile 。它 应该看起来像这样:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2.300-alpine3.9 as server

ENV ASPNETCORE_Environment=Production
ENV ASPNETCORE_URLS http://+:3978

WORKDIR /server
VOLUME ./wwwroot/Repository
COPY . ./

RUN dotnet publish -c Release -o publish

EXPOSE 3978/tcp

ENTRYPOINT ["dotnet","publish/CoreBot.dll"]

5. 从带有 .csproj 的根文件夹中文件,运行docker build -t <dockerImageName>:<tag> .

6.运行docker run -p 3978:3978 <dockerImageName>:<tag>

7. 在本地运行应用程序并验证它是否可以在 Emulator 中运行。 。这测试您的机器人是否作为 Docker 镜像运行。

8.更新您的 dockerfile,使其现在如下所示:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2.300-alpine3.9 as server

ENV ASPNETCORE_Environment=Production

WORKDIR /server
COPY . ./

RUN dotnet publish -c Release -o publish

ENTRYPOINT ["dotnet","publish/CoreBot.dll"]

9. 覆盖 Main()Program.cs使其包含:

public static void Main(string[] args)
{
CreateWebHostBuilder(args)
.UseKestrel()
.UseUrls("http://0.0.0.0:" + Environment.GetEnvironmentVariable("PORT"))
.Build()
.Run();
}

10.运行以下命令:

heroku login
heroku container:login
docker login --username=_ --password=$(heroku auth:token) registry.heroku.com

11。 Create a Heroku App并记住它的

12.运行:

docker build -t registry.heroku.com/<appName>/web .
docker push registry.heroku.com/<appName>/web
heroku container:release web --app <appName>

13. 使用 https://<appName>.herokuapp.com/api/messages 在模拟器中进行测试和你的MicrosoftAppIdMicrosoftAppPassword

注意:根据您的环境,您可能需要使用 0.0.0.0:3978localhost:3978 相反。也许也值得尝试127.0.0.1:3978 .

关于c# - 使用 docker 将 microsoft bot 框架部署到 heroku 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58629014/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com