.NET Core发布的应用程序只显示500错误
我有一个运行在Ubuntu 16.04上的ASP.NET Core应用程序。当我导航到目录并运行dotnet run
时,它工作正常。我也可以设置Nginx反向代理,如指定on the .NET Core Docs。但是,当我执行dotnet publish
,然后尝试使用发布目录(SlogWeb/bin/Debug/netcoreapp1.0/publish
)中的dotnet SlogWeb.dll
时,服务器启动时没有错误,但无法显示任何日志记录信息,导航到网站会产生500错误。你可以看到the full project on GitHub。最重要的位是可能是我project.json文件:.NET Core发布的应用程序只显示500错误
// dependencies and tools
"publishOptions": {
"include": [
"wwwroot",
"web.config",
"appsettings.Production.json"
]
},
"scripts": {
"prepublish": [ "npm install", "gulp build" ]
}
而且我Startup.cs文件的配置方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, DbSeeder dbSeeder) {
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
if (env.IsProduction()) {
app.UseForwardedHeaders(new ForwardedHeadersOptions {
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
}
// ...
如果我浏览到SlogWeb/bin/Debug/netcoreapp1.0/publish
和运行dotnet SlogWeb.dll
,我得到的标准启动消息,但然后沉默:
Hosting environment: Production
Content root path: /home/shaun/sites/Slog/src/SlogWeb/bin/Debug/netcoreapp1.0/publish
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
请让我知道如果有什么我应该发布。
没有什么东西在控制台,因为你发布/日志记录配置是错误的。
您有appsettings.json
文件,但不发布它(publishOptions
在projects.json
)。您发布了不存在的appsettings.productions.json
。
因此,您的配置中没有任何Logging
部分。这可能是你在控制台中什么都看不到的原因。
这除了@ iikkoo关于发布视图的评论解决了我的问题。 'appsettings.Production.json'文件被隐式地从存储库中排除,因为它包含我在开发中使用用户秘密的秘密配置。一旦我将'appsettings.json'添加到'publishOptions:include'数组中,记录工作正常,我能够看到问题是缺少Views。 – Shaun
您是否安装并配置了nginx? https://www.nginx.com/resources/wiki/start/topics/tutorials/install/
例如CONF:
server {
listen 80 default_server;
location/{
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
nginx配置在这里完全没有关系。 – Nozim
您是否收到来自Nginx或Kestrel的错误500?运行没有Nginx的网站,看看你是否直接从Kestrel收到任何结果。如果Kestrel会在日志中没有任何消息的情况下返回500错误(除非您禁用日志记录 - 请检查您的'Startup'进行日志记录设置),这非常奇怪。 – Dmitry
@Dmitry我添加了我正在使用的日志记录方法,以及当我尝试运行发布的'.dll'时从Kestrel中看到的内容。 – Shaun
你从'http:// localhost:5000'(仅限Kestrel)还是从'http:// localhost:80'(Nginx + Kestrel)收到错误500? – Dmitry