我有使用#!/usr/bin/env ruby
的脚本,但我已经转而使用Ruby Enterprise Edition而不是Ubuntu服务器附带的默认ruby。因此,当我尝试运行它们时脚本会变得怪异。如何将Ruby EE路径添加到/usr/bin/env
?
答案 0 :(得分:7)
#!/usr/bin/env ruby
类似于从命令行调用ruby
,因此适用相同的规则。基本上,将按顺序检查$PATH
环境变量中的各个条目,并使用先找到的ruby
。因此,请确保Ruby EE的ruby
在搜索路径顺序中早于其他ruby
。
我不熟悉Ruby EE,所以如果它没有名为ruby
的可执行文件,只需在您的Ruby EE可执行文件搜索路径的早期目录中创建一个符号链接。
答案 1 :(得分:5)
由于您对Ruby EE有明确的依赖性,因此您可以随时修改脚本而不是环境(可能会产生其他意外后果)。
#!/usr/bin/env ruby
变为
#!/path/to/enterprise/edition/ruby
现在读者已经清楚知道你使用的是特定版本的红宝石,而不仅仅是你路径中的红宝石。
答案 2 :(得分:2)
我有类似的问题,其中cron作业停止工作... Cron似乎默认运行命令而不使用您期望的用户PATH设置(以该用户身份登录时)。事实上,它似乎甚至没有使用任何默认的PATH设置(无论是在/ etc / profile或其他地方)。
我能够使用以下命令找到问题(第一个是cron如何运行命令):
su -c'printenv PATH'userX
输出:/ usr / local / bin:/ usr / bin:/ bin:/ usr / games
su -l userX -c'printenv PATH'
输出:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/usr/local/bin:/usr/bin: / bin中:在/ usr /游戏
第一个命令似乎没有以任何方式填充PATH变量,除了裸系统默认值。 在我的例子中,我通过添加必要的(REE)路径来解决它:/etc/login.defs,默认情况下如下所示:
/etc/login.defs:103:ENV_PATH PATH = / usr / local / bin:/ usr / bin:/ bin:/ usr / games
答案 3 :(得分:1)
请参阅Ruby EE文档页面中的第1.6节: http://www.rubyenterpriseedition.com/documentation.html
对于系统范围的更改,您可以在/ etc / environment文件中更新PATH以包含Ruby EE bin目录。也许是这样的:
PATH =“/选择/红宝石企业-XXX / bin中:在/ usr / local / sbin中:在/ usr / local / bin中:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏“
如果您只想让系统中的一个用户看到更改,您可以使用正确的路径更新.bashrc或.profile。
确保首先在目录列表中包含REE路径。
答案 4 :(得分:0)
我在这里发布了我在Ubuntu上使用的解决方案: http://groups.google.com/group/emm-ruby/browse_thread/thread/d0c685bbd096823a#msg_effa7d6ad42c541c
还有一些额外的步骤可以让它超越Ruby Enterprise Edition文档中描述的内容。