Soh*_*med 1 ruby gem amazon-ec2
我正在使用 Amazon EC2 实例,当我bundle install
以 ec2-user 身份运行时,它工作正常,但是当我以 root 用户身份尝试时,它会出错。
bash: bundle: command not found
当我gem list
为两个用户运行时,存在 bundler gem 。我已经以 root 用户身份安装了 ruby-devel rubygems ruby-libs。任何人都可以帮我理解这个问题吗?我已经搜索和阅读了几个小时。
两个用户的 echo $PATH 如下。
根:
/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin
ec2 用户:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin
我添加/usr/local/bin
和/usr/local/sbin
到secure_path/etc/sudoers
sudo visudo
Run Code Online (Sandbox Code Playgroud)
然后改变这一行:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
将此更改为
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
Run Code Online (Sandbox Code Playgroud)
解释:
Gems 安装在 /usr/local 路径,如果没有在 secure_path 中添加它,root 用户不能从那里运行脚本。您可以通过gem env
在 shell 中运行来检查您的 gems 路径。
我还有另一个问题。我使用 bundle 将 gems 安装为 ec2-user 并且 Amazon Linux 中的默认 rubygems 路径仅为 ec2-user 安装了它们,我不喜欢这样的东西,所以我从源安装了 ruby 和 rubygems,它具有将它们安装在 /usr/ 下的中央位置的路径当地的。我知道很多人不推荐它,但我喜欢这种方式。顺便说一句,我试图找到一种方法来改变 rubygems 路径,但我不能。