4

我是 yeoman 的新手,正在尝试将一个基本的 yeoman 生成的 angularjs 站点部署到弹性 beanstalk。在我部署的那一刻,我收到一个 502:Bad Gateway。我能够使用类似的东西将一个简单的nodejs应用程序部署到aws

服务器.js

var http = require("http");

http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(process.env.PORT || 8888);

如果不指定 url 中的端口,此页面可以正常工作。不确定这是否与此问题有关。

使用 yeoman 角度生成器的过程非常标准,即。

yo angular
yo angular:controller testController
..add some directives / views etc..
grunt server -- serves up pages correctly on port 9000
grunt -- which creates the dist folder

在这个阶段,我在本地有一个工作的 angularjs 应用程序,从这里我遵循正确部署早期 hello world 示例的相同工作流程(提交到 git repo,使用弹性 beanstalk cli..等提供图像。)。我根据 /dist 文件夹的内容创建了一个 repo,并将其部署到我得到 502 的位置。

我这里有 2 条线索,首先我应该在端口 80 上监听 - 尽管我之前在 :8888 上的示例有效,所以我认为下一个要求是最相关的,即根目录中名为 server.js 的文件。

grunt 构建输出 \dist 包含:

bower_components
views
styles
scripts
     25e920e4.modules.js
     5e188624.scripts.js
     76c21dca.plugins.js

所以我不确定下一步。我注意到 app.js 不是 dist 输出的一部分,但现在我有了这 3 个新的脚本 js 文件。我需要配置什么才能使 nodejs 容器服务于这个新结构?

这是原来的 app.js

'use strict';

angular.module('nodealphaApp', [])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  });

让我知道我是否可以提供更多信息

干杯!

4

2 回答 2

1

我有同样的问题!他们真的希望您使用grunt buildcontrol,但 AWS 没有选择。grunt buildcontrol推送到远程,这不是 Elastic Beanstalk 的部署方式。

当您键入eb deploy时,它将部署 .git 目录中的所有内容,而不仅仅是您的dist/目录。我的解决方法是在dist/.

  1. 删除存储库中的所有 Elastic Beanstalk 文件。仅供参考,它们是隐藏的。
  2. 使用终端,cd dist/从项目的根文件夹。
  3. 运行git init以创建本地 git 存储库。
  4. 进行初始提交,因为dist/一直是 .gitignore-d。
  5. 运行eb init, eb create,eb deploy内正常dist/
  6. 如果需要,设置环境变量;你的应用没有。
  7. eb open,手指交叉。
于 2015-04-17T20:46:06.137 回答
0

这是 Angular Nodejs 模板的示例:https ://github.com/joshdmiller/ng-boilerplate

如果端口匹配,也许您应该检查 Grunt 的配置文件。在您的 Gruntfile.js 中,您将拥有端口 9000,而在 Nodejs 代码中,您将在 8888 上侦听。因此,更改两者之一,使它们具有相同的端口。

看一眼:

grunt.registerTask('server', function (target) {

它将运行一些任务,并且在其中一个任务(可能是“打开”)中将使用来自 Grunt 配置的端口号。看

  grunt.initConfig({ ...

我希望这能帮到您。

于 2013-08-21T09:58:34.013 回答