具有可变路径和ember.js的生产托管docker映像
在nginx中部署my ember应用程序的docker映像的最佳实践是什么,其中rootURL可能在不同的环境中有所不同?我的设想如下:具有可变路径和ember.js的生产托管docker映像,ember.js,Ember.js,在nginx中部署my ember应用程序的docker映像的最佳实践是什么,其中rootURL可能在不同的环境中有所不同?我的设想如下: 构建一个环境设置为“生产”的ember应用程序 将其固定在nginx容器中 Ember数据调用位于代理通过的nginx实例后面的REST api,即nginx(包含Ember应用程序/资产)提供的/assets/etc,以及nginx代理通过的/api/v1/etc上的REST api serializers/application.js的命名空间设置为ap
/assets/etc
,以及nginx代理通过的/api/v1/etc
上的REST apiserializers/application.js
的命名空间设置为api/v1
/index.html
和/api/v1/myrestendpoint
不幸的是,我们的生产和UAT基础设施并不相同,因为我们有一个单独的子域,比如frontend.domain.com
,它使用负载平衡器根据紧跟在域之后的路径(例如frontend.domain.com/customer1
)将请求代理给后面的服务,以便点击nginx ember资产服务器的url将是frontend.domain.com/customer1/index.html
。路由工作到该页面,但是预构建的ember应用程序和返回的资产具有从/assets
而不是/customer1/assets
加载其他资产的引用,因此我们得到404,在ember数据REST调用503的情况下得到404
我的工作是使用nginx中的sub_filter模块更新路径,例如
location / {
sub_filter_types *;
sub_filter 'assets' 'customer1/assets';
sub_filter '%22rootURL%22%3A%22/%22' '%22rootURL%22%3A%22/customer1/%22';
sub_filter 'rootURL:"/"' 'rootURL:"/customer1/"';
sub_filter_once off;
try_files $uri /index.html =404;
}
它修复了css和js资产的路径,更新了ember ENV中的rootURL属性,并对ember app js中的rootURL执行了相同的操作。这似乎可行,但不是最好的办法
另一种选择可能是在emberconfig/environment.js
中执行某些操作,并针对不同的部署环境进行构建,但这将违反我们公司的政策,即相同的docker映像将通过测试投入生产。当我们将customer2路径作为url的一部分时,这肯定不会有帮助
有人能提出解决办法吗
我遇到的另一个问题是,Chrome在index.html中使用构建生成的integrity属性更改路径后拒绝加载我的JS资产,因此我必须设置integrity=”“
,这也不太好