【发布时间】:2009-06-30 15:21:01
【问题描述】:
我有使用 #!/usr/bin/env ruby 的脚本,但我已切换到使用 Ruby 企业版,而不是 Ubuntu 服务器中包含的默认 ruby。因此,当我尝试运行它们时,这些脚本会崩溃。如何将 Ruby EE 路径添加到/usr/bin/env?
【问题讨论】:
标签: ruby
我有使用 #!/usr/bin/env ruby 的脚本,但我已切换到使用 Ruby 企业版,而不是 Ubuntu 服务器中包含的默认 ruby。因此,当我尝试运行它们时,这些脚本会崩溃。如何将 Ruby EE 路径添加到/usr/bin/env?
【问题讨论】:
标签: ruby
#!/usr/bin/env ruby 类似于简单地从命令行调用ruby,因此适用相同的规则。基本上,$PATH 环境变量中的各个条目按顺序检查,并使用最先找到的ruby。因此,请确保 Ruby EE 的 ruby 在搜索路径顺序中早于其他 rubys。
我不熟悉 Ruby EE,所以如果它没有名为 ruby 的可执行文件,只需在搜索路径中位于 Ruby EE 可执行文件的早期目录中创建一个符号链接。
【讨论】:
由于您对 Ruby EE 有显式依赖,因此您始终可以修改脚本而不是您的环境(这可能会产生其他意想不到的后果)。
#!/usr/bin/env 红宝石变成
#!/path/to/enterprise/edition/ruby现在读者可以清楚地看到,您使用的是特定版本的 ruby,而不仅仅是路径中的任何 ruby。
【讨论】:
我遇到了一个类似的问题,即 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
【讨论】:
请参阅 Ruby EE 文档页面中的第 1.6 节: http://www.rubyenterpriseedition.com/documentation.html
对于系统范围的更改,您可以更新 /etc/environment 文件中的 PATH 以包含 Ruby EE bin 目录。也许是这样的:
PATH="/opt/ruby-enterprise-x.x.x/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/游戏”
如果您只想让系统上的一个用户看到更改,您可以使用正确的路径更新您的 .bashrc 或 .profile。
确保在目录列表中首先包含 REE 路径。
【讨论】:
我在这里发布了我在 Ubuntu 上使用的解决方案: http://groups.google.com/group/emm-ruby/browse_thread/thread/d0c685bbd096823a#msg_effa7d6ad42c541c
除了 Ruby 企业版文档中描述的内容之外,还有一些额外的步骤使其工作。
【讨论】: