【问题标题】:Disabling development environment in .NET Core 2.0 app in AWS在 AWS 的 .NET Core 2.0 应用程序中禁用开发环境
【发布时间】:2018-09-19 07:20:46
【问题描述】:

我有一个部署到 AWS ElasticBeanstalk 的 .NET Core MVC 应用程序。但是当我去应用程序时,我收到一条错误消息:

不应在已部署的应用程序中启用开发环境

  1. launchsettings.json 文件中我设置了ASPNETCORE_ENVIRONMENT's 值为Production
  2. 当我使用 Visual Studio (AWS toolkit) 部署应用程序时,我将 Project build configuration 的值设置为 Release
  3. 我还创建了带有名称的环境变量 ASPNETCORE_ENVIRONMENTProduction 中的值 EB Software Configuration

但我仍然遇到同样的错误,知道有什么解决方法吗?

我的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?}");
        });
    }
}

【问题讨论】:

  • Development environment should not be enabled in deployed applications 不是错误消息。这是关于在生产环境中不启用开发模式的提示。您可能会得到一个“正常”的 HttpStatus 代码 500。请 启用开发,让它快速显示实际的错误消息。并且不要忘记在测试后禁用它。
  • @rickvdbosch,好的,但是怎么样?我已经完成了上述所有操作的相反操作,仍然出现这个“提示”错误。
  • ASPNETCORE_ENVIRONMENT 变量设置为Development重新启动应用程序。如果你有一个相当标准的实现,那么 Development 很可能会给你一个 DeveloperExceptionPage
  • 我也已经完成了,这也没有帮助@rickvdbosch
  • 你应该也可以在网络配置中设置它

标签: amazon-web-services .net-core asp.net-core-mvc amazon-elastic-beanstalk


【解决方案1】:

一个疯狂的解决方案:

替换:

  if (env.IsDevelopment())
    {
        app.UseBrowserLink();
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

  app.UseBrowserLink();
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();

【讨论】:

    【解决方案2】:

    launchsettings.json 是特定于 Visual Studio 构建的。它不会影响部署。

    以下问题提供了对该问题的一些见解

    AWS Elastic Beanstalk environment variables in ASP.NET Core 1.0

    【讨论】:

      【解决方案3】:

      感谢您发布代码。我在这里回答是因为要说的内容超出了评论表单的允许范围。

      TLDR

      您的环境变量在 EBS 中被忽略,因为您的初创公司没有选择它们。

      我不知道launchSettings.json 对 EBS 有什么影响,但考虑到该文件中的环境变量被忽略,我怀疑答案是否定的。

      您可以在 EBS 中保存环境变量。

      launchSettings.json

      我自己不使用这些,所以接下来是研究和琐碎的测试。

      This MS article 声称此文件仅用于在 Visual Studio 中运行

      使用 Visual Studio 时,可以在 launchSettings.json 文件中设置环境变量。

      但是我从一个简单的测试中知道,这些 由项目目录中的 dotnet run 拾取。另外,我知道 VS Code 会忽略它而支持.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 core 2 在环境变量方面一团糟。我们的解决方案不是根据my earlier answer 解析地狱文件,而是对我们的 dotnet 应用程序进行 Dockerise。

      也就是说,您可以在 EB 中保存环境变量。正如您所说,软件配置是输入它们的正确位置。然后,单击您的环境(EB 中显示的绿色/灰色/任何卡片),转到“操作”菜单并保存配置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-02
        • 1970-01-01
        • 2017-04-28
        • 1970-01-01
        • 2014-11-02
        • 2018-03-08
        相关资源
        最近更新 更多