42

Amazon Beanstalk 将 node 和 npm 安装到非常不起眼的地方 - 如果 EB 决定使用更新版本的 node,我不确定它们不会改变,这会导致我的应用程序中断。

这些是 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.

如何为这些可执行文件获得一致的文件路径?为什么EB会这样做?

作为参考,我尝试在 中设置NodeVersion选项.ebextensions/app.config,它对安装位置没有影响。

4

5 回答 5

62

您可以使用如下命令将最新的节点npm二进制文件添加到 $PATH:

PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin

我不知道如何防止 beanstalk 命令再次重置 $PATH。

如果您愿意,您可能可以使用类似于上述命令的命令创建符号链接,并将其用作 cron 脚本等中的参考点。

同意,这很烦人。

于 2013-09-25T17:09:50.260 回答
30

根据 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 的一部分)
于 2015-07-26T13:13:09.970 回答
10

我们在“找不到节点”方面遇到了类似的问题,试图在容器命令中运行节点。在 EC2 实例上运行后ps aux,我们看到 EB 可以访问$NODE_HOMEenv 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'

(感谢艾伦成长)

于 2016-10-06T20:32:39.807 回答
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"
于 2015-05-07T17:01:28.827 回答
1

亚马逊弹性豆茎

Grand 访问节点命令

  1. 须藤
  2. 贵宾
  3. nodejs:x:496:494::/tmp:/bin/bash (":wq" 保存更改)
  4. sudo su nodejs
  5. PATH=$PATH: ls -td /opt/elasticbeanstalk/node-install/node-* | head -1/bin
  6. 节点-v(享受:)
于 2018-02-06T13:30:45.547 回答