Node.js Amazon Elastic Beanstalk节点和npm非标准安装位置
Amazon Beanstalk将node和npm安装到非常隐蔽的地方——我不确定如果EB决定使用较新版本的node,它们是否会改变,这会导致我的应用程序崩溃 以下是节点和npm的位置:Node.js Amazon Elastic Beanstalk节点和npm非标准安装位置,node.js,amazon-web-services,npm,amazon-elastic-beanstalk,Node.js,Amazon Web Services,Npm,Amazon Elastic Beanstalk,Amazon Beanstalk将node和npm安装到非常隐蔽的地方——我不确定如果EB决定使用较新版本的node,它们是否会改变,这会导致我的应用程序崩溃 以下是节点和npm的位置: /opt/elasticbeanstalk/node-install/node-v0.8.24-linux-x64/bin/node /opt/elasticbeanstalk/node-install/node-v0.8.24-linux-x64/bin/npm 我担心0.8.24部分的变化,我不想在cro
/opt/elasticbeanstalk/node-install/node-v0.8.24-linux-x64/bin/node
/opt/elasticbeanstalk/node-install/node-v0.8.24-linux-x64/bin/npm
我担心0.8.24
部分的变化,我不想在cron或monit脚本中查找通常只是/usr/bin/XXX
的内容
如何为这些可执行文件获取一致的文件路径?EB为什么要这样做
作为参考,我尝试在
.ebextensions/app.config
中设置NodeVersion
选项,它对安装位置没有影响。您可以使用如下命令将最新的节点和npm二进制文件添加到$PATH:
PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin
我不知道如何防止beanstalk命令再次重置$PATH
如果您愿意,您可能可以使用类似于上面的命令创建一个符号链接,并将其用作cron脚本等中的参考点
同意,这非常烦人。我在我的项目文件夹中创建了文件
/.ebextensions/node.config
,以声明我的节点版本并将符号链接添加到/bin文件夹。有关.ebextensions文件夹的详细信息,请参见:
在Peter Johnson&Greg Tatum回复后,我创建了指向最新节点可执行文件的符号链接:
container_commands:
01_node_binary:
command: "ln -sf `ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin/node /bin/node"
- 我找到了最新版本的节点安装二进制文件
- 在此基础上,我在/bin目录中创建了一个符号链接(它是$PATH的一部分)
ps aux
后,我们看到EB可以访问$NODE\u HOME
env var:
su -s /bin/sh -c PATH=$PATH:$NODE_HOME/bin $EB_NODE_COMMAND 2>&1 nodejs
这可用于.ebextensions,例如:
container_commands:
your_node_script:
command: 'env PATH="$PATH:$NODE_HOME/bin" ./bin/your_node_script'
(感谢Alan Grow)亚马逊弹性豆茎
“访问节点”命令
ls-td/opt/elasticbeanstalk/node-install/node-*| head-1
/bin我假设这些位置不在路径中?是的,这是正确的,它们不是。下次部署应用程序时,此脚本将失败Hanks@h-kippo我更新了它,因此它会强制创建符号链接(如果它已经存在)(如果这是问题)为了澄清,应该将其放入类似
.ebextensions/nodepath.config
,的文件中,对吗?当我使用ssh连接到eb实例时,这确实允许我从任何路径运行npm和node,但由于某些原因,该命令永远不会“接受”参数。例如,npm install
只列出了npm的所有可能选项。这是因为这些选项被评估为shell脚本,而不是符号链接。尝试模式:“100755”
代替。根据最新文档,您必须以“120xxx”开始创建符号链接:这似乎比公认的答案更可靠,因为它使用节点版本设置,而不仅仅是选择最近安装的版本(或任意排序顺序)命令:“env PATH”=“$PATH:$NODE_HOME/bin”sh-c'npm run build'
工作正常。谢谢这对我来说似乎不起作用,因为NODE_HOME似乎没有设置:(堆栈溢出没有呈现所需的反向标记,(请参阅Peter Johnson的回答)或者只需使用dorianm的answersudo ln-sfls-td/opt/elasticbeanstalk/NODE install/NODE-*| head-1中建议的环境变量$NODE\u HOME
/bin/NODE/bin/NODE
container_commands:
your_node_script:
command: 'env PATH="$PATH:$NODE_HOME/bin" ./bin/your_node_script'