2014-12-04 74 views
0

我敢肯定,我的头衔需要一些调整,但这里的问题:测试为App Engine + Angularjs客户端 - 每一个不同的端口上运行

有没有办法对我来说,成为了我的AppEngine /使用在给定端口上运行的dev_appserver(8080上的web,54381上的API)的Google Endpoint(Python)项目,同时使用不同服务器为服务我的AngularJS客户端(并且必要时使用不同的端口,可能为5000)?

背景:

  • 我现在遇到的问题是在我的应用程序的结构和 我可以使用开发/测试工具/工艺。
  • 为了充分利用现有的GruntJS优点,我决定将我的项目的App Engine 服务器代码和AngularJS客户端代码分层到由Yeoman Generator为Angular创建的目录结构 。
  • 我认为通过引入这种类似Grunt的环境,我可以轻松地将 mobile-angular-ui代码作为bower_component并将其轻松链接到我的主索引html页面中。这似乎是这种情况。
  • 问题:App Engine最终监控了bower_components下的文件夹/层次结构,该文件超出了要监控的应用程序服务器的文件数限制(dev_appserver.py表示'应用程序中的文件太多')。这通常让我觉得“必须有更聪明的方式”。

选项我看到:

  • 从繁重的发球服务器服务于客户端的代码,并使用正常dev_appserver.py的谷歌端点服务器。我相信如果在同一个主机上,这些需要在不同的端口上运行。所以我不知道如何将Google Endpoint客户端加载到服务器上。
  • 谷歌增加了一个补丁dev_appserver允许文件改变监视代码坚持排除(在this Google App Engine Issue讨论的东西)
  • 找到一个方法来走动使用咕噜的插件文件,以便能有效地重新打造了“ dist“文件夹,我使用的任何外部组件都指向了我的服务客户端代码。避免需要让我的App Engine app.yaml公开整个bower_components文件夹,以使我的脚本包含工作。

回答

0

如果使用grunt-connect-proxy在端口5000上运行你的咕噜服务器将能够在8080端口上

请求转发到App Engine的服务器你保持咕噜的美好生活重载功能的方式。

This article解释了如何在Java/Maven上完成它,但Grunt部分完全相同。

下面是修改为使用代理我Gruntfile.js提取物:

connect: { 
      options: { 
       port: 9000, 
       // Change this to '0.0.0.0' to access the server from outside. 
       hostname: 'localhost', 
       livereload: 35729 
      }, proxies: [ 
       { 
        context: [ 
         '/_ah', 
         '/admin' 
        ], 
        host: 'localhost', 
        port: 8080, 
        https: false, 
        changeOrigin: false, 
        xforward: false 
       } 
      ], livereload: { 
       options: { 
        open: true, 
        base: [ 
         '.tmp', 
         '<%= yeoman.app %>' 
        ], 
        middleware: function (connect, options) { 
         if (!Array.isArray(options.base)) { 
          options.base = [options.base]; 
         } 

         // Setup the proxy 
         var middlewares = [require('grunt-connect-proxy/lib/utils').proxyRequest]; 

         // Serve static files. 
         options.base.forEach(function (base) { 
          middlewares.push(connect.static(base)); 
         }); 

         // Make directory browse-able. 
         var directory = options.directory || options.base[options.base.length - 1]; 
         middlewares.push(connect.directory(directory)); 

         return middlewares; 
        } 
       } 
      }, 
... 
grunt.loadNpmTasks('grunt-connect-proxy'); 
... 
grunt.registerTask('server', function (target) { 
     if (target === 'dist') { 
      return grunt.task.run(['build', 'connect:dist:keepalive']); 
     } 

     grunt.task.run([ 
      'clean:server', 
      'concurrent:server', 
      'autoprefixer', 
      'configureProxies:server', 
      'connect:livereload', 
      'watch' 
     ]); 
    }); 
相关问题