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
部分会发生变化,而在尝试查找通常只有/usr/bin/XXX
的内容时,我宁愿不要使用cron或monit脚本中的内容。
如何为这些可执行文件获取一致的文件路径?为什么EB这样做?
供参考,我尝试在NodeVersion
中设置.ebextensions/app.config
选项,但它对安装位置没有影响。
答案 0 :(得分:56)
您可以使用以下命令将最新的节点和 npm 二进制文件添加到$ PATH:
PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin
我无法弄清楚如何防止beanstalk命令再次重置$ PATH。
如果您如此倾向,可以使用与上述类似的命令创建符号链接,并将其用作cron脚本等中的参考点。
同意,这非常令人讨厌。
答案 1 :(得分:27)
继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"
答案 2 :(得分:8)
我们遇到类似的问题"找不到节点",尝试在容器命令中运行节点。在EC2实例上运行ps aux
后,我们看到EB可以访问$NODE_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)
答案 3 :(得分:3)
我在项目文件夹中创建了文件/.ebextensions/node.config
以声明我的节点版本并将符号链接添加到/ bin文件夹。有关.ebextensions文件夹的更多信息,请访问:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
option_settings:
- option_name: NodeVersion
value: 0.12.2
files:
"/bin/node" :
mode: "755755"
content: "/opt/elasticbeanstalk/node-install/node-v0.12.2-linux-x64/bin/node"
"/bin/npm" :
mode: "755755"
content: "/opt/elasticbeanstalk/node-install/node-v0.12.2-linux-x64/bin/npm"
答案 4 :(得分:1)
ls -td /opt/elasticbeanstalk/node-install/node-* | head -1
/ bin中