作为制作我自己的使用meanjs的应用程序的起点,我去了meanjs网站并使用他们的yeomen生成器来创建模板/示例应用程序。按照说明在本地桌面计算机上运行开箱即用的示例应用程序在几分钟内完成。为了完成练习,我尝试将示例应用程序部署到AWS / EC2实例,然后再对其进行任何更改。我过去使用过命令行部署工具并喜欢它。此外,现在您可以选择已安装并准备好节点和npm的EC2 Linux实例。
将样本检入git后,我运行“git aws.push”来部署应用程序。
问题出在package.json行:
"postinstall": "bower install --config.interactive=false"
在eb-activity.log中:
npm WARN无法在wd中运行.sample @ 0.0.1 bower install --config.interactive = false(wd = / tmp / deployment / application)
结果是AngularJS最终没有安装在/ public / lib中。
我尝试的第一件事就是在package.json文件中提供完整路径:node_modules / bower / bin / bower。这没有帮助,导致同样的错误。还注意到像“grunt”这样的其他命令不需要package.json中指定的完整路径,它们可以工作。
我不太了解aws.push能够理解为什么会发生这种错误的黑盒子魔法。例如,用户运行的是什么?该用户拥有哪些权限?如果在运行npm install时使用了哪些选项?
我确实找到了解决办法,但是如果aws.push能够直接运行bower install,它会增加很多额外的步骤。基本上我可以在连接到我的EC2实例的ssh客户端中手动运行bower安装,在已安装的文件上设置所有者/组,然后重新启动服务器。
解决方法:
1)在本地命令提示符下运行git aws.push。等待部署失败以完成。
2)将ssh客户端连接到EC2实例。从命令提示符:
cd /var/app/current
/ *注意:如果我不使用sudo我登录的ec2user,因为没有权限创建/ public / lib将AngularJS安装到* /
sudo node_modules/bower/bin/bower install --config.interactive=false --allow-root
/ *注意:只需将所有者和组更改为与aws.push部署的其他文件相同* /
sudo chown -R nodejs public/lib
sudo chgrp -R nodejs public/lib
现在安装AngularJS并且示例应用程序正常运行。
如何消除额外的步骤并使其成为aws.push可以成功进行凉亭安装?
答案 0 :(得分:0)
尝试使用root用户在运行CentOs的私有服务器中发布我的nodejs应用时遇到了同样的问题。 “postinstall”:我的package.json文件中的“./node_modules/bower/bin/bower install”触发了同样的错误,因此唯一适合我的解决方案是使用这两个选项来避免错误:
1:对bower install命令使用--allow-root选项
"postinstall": "./node_modules/bower/bin/bower --allow-root install"
2:对npm install命令使用--unsafe-perm选项
npm install --unsafe-perm