我们递归地设置一个带有角4的SPA,在Azure上与Docker一起托管它。通常,环境(Prod、Development、the )与环境-Con图(如果我们使用Angular build命令编译)一起被设置为角。这很好,但是Docker的工作流程有点不同:
这意味着我们有一个时间问题,因为在编译时,我们不能说,应用程序将在哪个环境上运行。对于服务器(.net核心)来说,这是没有问题的,因为我们可以使用ASPNETCORE_ENVIRONMENT变量,但是我们没有找到使应用程序了解环境类型的解决方案。我几乎可以肯定,我们并不是唯一有这个问题的人,但到目前为止,我还没有找到合适的解决办法。我们不知道周围有什么可能吗?
发布于 2018-12-03 07:50:06
由于我的主要目标不是为每个环境创建一个容器,而是要保持构建过程环境无关,所以我想出了以下解决方案:我正在使用Docker -堆栈文件添加一个命令(我的Docker映像是NGinx):
command: /bin/bash -c "cp /usr/share/nginx/html/assets/app-settings/appsettings.__EnvironmentName__.json /usr/share/nginx/html/assets/app-settings/appsettings.json && find "/usr/share/nginx/html/assets/app-settings/" -type f -name "*.json" -not -name "appsettings.json" -exec rm {} ';' && exec nginx -g 'daemon off;'"该命令执行三项任务:
发布过程还将EnvironmentName替换为部署到的特定环境。这意味着,每个容器现在都有一个带有特定于环境的数据的appsettings.json。在角度代码上,我使用环境文件只是为了编译时,环境无关的信息:
export const environment = { production: false };
将应用程序设置保存为资产:

为了读取appsettings.json的运行时信息,我使用本地http调用创建了一个appsettings服务:
@Injectable()
export class AppSettingsProviderService {
private appSettings: AppSettings;
public constructor(private http: LocalHttpService) {
}
public async provideAppSettingsAsync(): Promise<AppSettings> {
if (this.appSettings) {
return Promise.resolve(this.appSettings);
}
// This path needs to be relative to the files in the dist-folder
this.appSettings = await this.http.getAsync<AppSettings>('./assets/app-settings/appsettings.json');
return this.appSettings;
}
}这在开发过程中同样有效,因为在本例中只使用了appsettings.json,即使使用ng服务,代码也被编译成dist,这意味着相对路径仍然正确。
https://stackoverflow.com/questions/44549480
复制相似问题