2014-12-04 67 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' 
     ]); 
    }); 
相關問題