生产主机码头图像与可变路径和ember.js

时间:2016-11-16 09:41:55

标签: ember.js

在nginx中部署我的ember应用程序的docker镜像的最佳做法是什么?rootURL可能在环境之间有所不同?我的方案如下:

  1. 构建一个环境设置为生产的ember应用程序。
  2. 在nginx容器中对其进行Docker化。
  3. Ember数据调用位于nginx实例后面的REST api,代理传递它,即nginx(包含ember app / assets)提供的/assets/etc和nginx代理通过的/api/v1/etc上的REST api
  4. serializers/application.js的命名空间设置为api/v1
  5. 以上内容适用于我的本地开发码头引擎,测试和系统测试环境,其中网址为<domain>/index.html<domain>/api/v1/myrestendpoint

    不幸的是,我们的生产和UAT基础设施不同,因为我们有一个子域名frontend.domain.com,它使用负载均衡器根据域后面的路径代理对后面服务的请求,例如frontend.domain.com/customer1所以要点击nginx余烬资产服务器,网址为frontend.domain.com/customer1/index.html。路由适用于该页面,但是预先构建的ember应用程序和返回的资产引用了从/assets而不是/customer1/assets加载其他资产,因此我们得到404并且在ember数据REST的情况下拨打503。

    我的工作是使用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做了同样的操作。这似乎有效,但它不是最好的方法。

    另一个选项可能是在ember config/environment.js中执行某些操作并为不同的部署环境构建,但这会违反我们的公司策略,即同一个docker镜像通过测试到生产。当我们将customer2路径作为url的一部分时,这肯定无济于事。

    有人可以建议解决方案吗?

    我遇到的另一个问题是Chrome在使用构建生成的完整性属性更改index.html中的路径后拒绝加载我的JS资产,因此我必须设置integrity="",这也不是很好。

0 个答案:

没有答案