我有一个.NET Core应用程序,我把它部署到AWS ElasticBeanstalk上。但是当我进入应用程序时,我会收到一个错误消息:
在部署的应用程序中不应启用开发环境。
launchsettings.json
文件中,我将ASPNETCORE_ENVIRONMENT
的值设置为Production
。Project build configuration
的值设置为Release
。ASPNETCORE_ENVIRONMENT
和EB Software Configuration
中的值Production
创建了环境变量。但我还是会犯同样的错误,知道会有什么修正吗?
我的launchSettings.json
文件如下所示:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://DUMMY.us-west-2.elasticbeanstalk.com/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "http://DUMMY.us-west-2.elasticbeanstalk.com/",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"AlacsWeb": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://DUMMY.us-west-2.elasticbeanstalk.com/"
}
}
}
和startup.cs
文件:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Add application services.
services.AddTransient<IEmailSender, EmailSender>();
services.AddMvc();
// Add http context
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
发布于 2018-04-12 23:13:42
谢谢你贴出你的代码。我在这里回答是因为有更多的话要说,超出了评论表格所允许的范围。
TLDR
在EBS中,您的环境变量被忽略了,因为您的创业公司没有选择它们。
我不知道launchSettings.json
在EBS中有什么影响,但是考虑到文件中的环境变量被忽略了,我怀疑答案是没有的。
您可以在EBS中保存环境变量。
launchSettings.json
我自己不使用这些,所以下面是研究和琐碎的测试。
这篇MS文章声称这个文件只在Visual中运行
使用Visual时,可以在launchSettings.json文件中设置环境变量。
但是,我从一个简单的测试中了解到,这些内容也是由dotnet run
在项目目录中获取的。另外,我知道VS代码会忽略它而支持.vscode/launch.json
。
我不知道的是IIS是否注意到了它。(我指的是EBS实例中的IIS,而不是您的开发框中的IIS Express )。
环境变量
我想我能理解为什么环境变量被忽略了。
Startup.cs
有一个可供选择的构造函数,它允许您从环境变量、配置文件等构建配置对象。它接受一个IHostingEnvironment
实例。
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.AddEnvironmentVariables(); // <--- This picks up env variables
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// etc ....
}
EB环境变量
正如我在评论中所解释的那样,EB + dotnet核心2在环境变量上处于混乱状态。我们的解决方案不是解析每个我早些时候的回答的底层文件,而是对我们的dotnet应用程序进行文档化。
也就是说,您可以在EB中保存环境变量。正如您所说,软件配置是输入它们的正确位置。然后,单击您的环境(在EB中显示的绿色/灰色/任何卡片),转到Actions菜单,然后保存配置。
发布于 2018-04-17 01:35:27
发布于 2021-01-15 08:39:37
一个疯狂的解决方案:
取代:
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
至
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
https://stackoverflow.com/questions/49740635
复制