我正在尝试将GRPC依赖项添加到节点弹性beanstalk应用程序,并且我的所有部署都失败了。从我的package.json
部署工作中删除GRPC依赖项后。
错误是
ERROR: Failed to run npm install.
> grpc@1.10.1 install /tmp/deployment/application/node_modules/grpc
> node-pre-gyp install --fallback-to-build --library=static_library
node-pre-gyp ERR! Pre-built binaries not installable for grpc@1.10.1
and node@8.9.3 (node-v57 ABI, glibc) (falling back to source compile
with node-gyp)
node-pre-gyp ERR! Hit error EACCES: permission denied, mkdir
'/tmp/deployment/application/node_modules/grpc/src/node'
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied
我在另一个节点应用上遇到此问题,并且能够通过运行npm --save-dev eb-fix-npm
来解决此问题,但它无法使用此应用。我有时也会得到一个错误:`无法创建符号链接,文件已经存在(释义)。
我也设置了此文件以尝试解决此问题。
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" :
mode: "000775"
owner: root
group: root
content: |
#!/bin/bash
function error_exit
{
eventHelper.py --msg "$1" --severity ERROR
exit $2
}
export HOME=/home/ec2-user
OUT=$(/opt/elasticbeanstalk/containerfiles/ebnode.py --action npm-install 2>&1) || error_exit "Failed to run npm install. $OUT" $?
echo $OUT
感谢您的帮助
答案 0 :(得分:3)
在我的情况下,使用.ebextensions/00_dir_permission.config
的解决方案不起作用(仍然给我带来错误),但是在unsafe-perm=true
文件中使用.npmrc
的解决方案却起作用了。参见https://stackoverflow.com/a/46001517/769726
PS:在Node.js版本上运行:在64位Amazon Linux / 4.5.4上为8.11.4
答案 1 :(得分:2)
我能够通过以下文件解决这个问题 - > .ebextensions/00_dir_permission.config
。希望这有助于其他人
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/00_set_tmp_permissions.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
chown -R ec2-user /tmp
chown -R $USER:$(id -gn $USER) /tmp/.config
chown -R nodejs:nodejs /tmp/.npm
答案 2 :(得分:1)
适用于在项目中使用bcrypt
库的任何人。
如果尝试使用Elastic Beanstalk部署代码,则会出现此错误。
只需删除bcrypt
并开始使用bycryptjs
为此,我的头撞了2个星期。
也将bcrypt
降级为3.0.0对此无济于事。
答案 3 :(得分:1)
我通过添加一个.npmrc
文件来解决此问题
unsafe-perm=true
但是不能将.npmrc
添加到根应用程序文件夹中。您必须在EB配置文件中指定它。检出https://stackoverflow.com/a/24993093
答案 4 :(得分:0)
将名为.npmrc的文件添加到应用程序中,内容如下:
unsafe-perm=true
现在在将其推送到ElasticBeanStalk之前使用以下命令:
git add .npmrc
git commit -m"EB issue fix"
现在部署您的代码。应该可以。