我的背景:
- ruby-enterprise 1.8.7,在 CentOS 5 上
- ruby 和 gem 安装在 /usr/local/bin 中
- ./runner: 正确运行
sudo./runner
Rails 需要 RubyGems >= 1.3.2。请安装 RubyGems 并重试:http://rubygems.rubyforge.org
(因为 sudo 的 PATH 有限制)
sudo PATH=$PATH ./runner:运行正确,因为 runner 的 PATH 中再次有 /usr/local/bin
问题:
当 gem 不在 /bin 或 /usr/bin 中时,还有其他替代方法(可能更优雅 - 只需很少的变化)来使用 sudo 启动运行器吗?
我想到过(但不满意)的有:
- 将 gem 的符号链接放在 /usr/bin 中
- 修改跑步者?
- 修改 sudoers?
也许有一种方法可以通过配置文件或命令行参数来运行?
答案1
您应该能够使用该env_file
选项sudoers
并将路径规范放入它指向的文件中。例如:
sudoers
:
Cmnd_Alias RUBY = /path/to/runner
Defaults!RUBY env_file=/path/to/rubypathfile
ALL ALL=(ALL) RUBY
/path/to/rubypathfile
:
PATH=/usr/local/bin:/usr/bin:/bin
您可能还会发现该env_keep
选项很有用。
看一下sudo sudo -V | less
,看看它是否告诉你任何有趣的东西。特别是对“path”或“ruby”进行不区分大小写的搜索。