【问题标题】:Ruby script shebang with rbenv and uninstalled project-required version带有 rbenv 和已卸载项目所需版本的 Ruby 脚本 shebang
【发布时间】:2015-12-06 06:23:04
【问题描述】:

我在 bin/setup 的 Ruby 应用程序中有一个脚本,该脚本以:

#!/usr/bin/env ruby

env 告诉哪些可执行文件可以访问,如果$PATH 上有可用的 Ruby 版本,脚本应该使用它来执行。

假设我正在使用 rbenv 并且我有一个全局 Ruby 版本集(system 在 OS X 上回退到 /usr/bin/ruby)或其他东西。 system 或我的全局 Ruby 版本与在执行此 bin/setup 脚本的方向上声明的 .ruby-version 不同。 .ruby-version 文件包含 2.1.6。这会导致脚本立即中止:

rbenv: version `2.1.6' is not installed (set by /Users/olivierlacan/project/.ruby-version)

这意味着无法依赖env 来动态获取应该执行bin/setup 脚本的适当版本的Ruby。

我找到的唯一选择是:

#!/usr/bin/ruby

但这不能移植到任何没有在/usr/bin/ 中安装 Ruby 的 Linux 或 Windows 操作系统,比如 OS X。有没有办法解决这个问题?

【问题讨论】:

  • 我不明白这里有什么问题。似乎一切都按设计进行。您的项目配置为使用未安装的 Ruby 2.1.6。因此,任何从该项目运行 Ruby 脚本的尝试都将失败。如果 rbenv 允许在此处使用与 .ruby-version 文件中指定的不同的 Ruby 版本,那么 rbenv 将被破坏并且无法正常工作。

标签: ruby rbenv env


【解决方案1】:

由于rbenv-which 解析命令的方式,在特定 Ruby 版本和全局安装 gem 时,看起来像 rbenv 中的 there's a similar issue

GitHub user @yyuuThe rbenv-which-ext extensionthe Python fork pyenv 的维护者,至少解决了这个问题。可能需要额外的补丁才能以相同的方式将ruby 视为命令,但值得一试。我将尝试在本地重新创建您的问题并进行相同的验证。

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多