【问题标题】:How to make xcode use the correct version of ruby when running a script?运行脚本时如何使 xcode 使用正确版本的 ruby​​?
【发布时间】:2013-04-02 23:33:54
【问题描述】:

在 xcode 中,我有一个运行 ruby​​ 脚本的“运行脚本”构建阶段。但是,似乎 xcode 正在尝试使用默认的 mac 1.8 版本的 ruby​​ 而不是最新版本来运行它。鉴于该脚本需要一个 gem,它会因 require 错误而失败,并且错误中的路径指向 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/

显然,这条路上的 1.8 让我很怀疑。

如果我打开终端并运行命令 ruby -v,那么它会正确返回 2.0.0p0,这是我使用 RVM 安装并设置为默认值的。

我怎样才能让 Xcode 找到正确的位置?还是我误解了这个错误?

更新:

为了提供更多信息,这里是编译器抛出的确切错误:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- json (LoadError)
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /Volumes/Macintosh HD/Documents/Projects/WesternMusicElements/WesternMusicElements/Ruby/NoteCollectionParser.rb:9
Command /bin/sh failed with exit code 1

【问题讨论】:

  • 我也有类似的问题。你找到解决办法了吗?
  • 我实际上认为不值得花时间解决并在 xcode 之外运行脚本
  • 我发现如果我从终端运行 Xcode 它适用于新版本,但如果我从应用程序运行它适用于 1.8。最后一个答案对我有帮助。

标签: ruby xcode rvm


【解决方案1】:

您也可以使用rvm use system 切换到默认的 mac os ruby​​,然后使用 sudo 安装 gem。对我来说似乎是最简单的。

【讨论】:

    【解决方案2】:

    如果您让 Xcode 打印出环境变量 IIRC,则 Xcode 设置的 $PATH 与您在常规终端会话中加载的 $PATH 不同。

    这让您(至少)有两种方法可以解决问题:

    1. 您可以编辑脚本以直接指向 rvm 安装的 ruby​​。如果您的脚本必须在多个系统上运行,这可能会更好(即使它确实违背了 rvm 承诺的工作方式)。

    2. 根据 Peter Hosey 在this 问题中对 Chris Hanson 的回答的评论,您可以在~/.MacOSX/environment.plist 中设置将适用于您启动的所有进程的环境变量。

    【讨论】:

    • 我在 macOS 10.14+ 上看不到 .MacOSX 文件夹。 :(
    【解决方案3】:

    假设您在项目中指定 rvm ruby​​ 版本控制(我认为您应该这样做),我认为这是一个比目前更普遍适用的答案。

    概括地说,在你的 shell 脚本中,你应该

    # provides the rvm *function* to your shell script 
    source "${SOMETHING}/scripts/rvm"
    
    # then, for this script, the rvm function will change to
    # the controlling ruby version for the pwd when this is run
    rvm use .
    

    我在answer 中详细介绍了这一点。

    【讨论】:

      【解决方案4】:

      我用它用默认系统解释器以外的解释器运行 Xcode:

      1. 如果 Xcode 已打开,请退出并转到您的终端。
      2. 激活您要使用的 rvm。
        rvm use 2.0.0p0
      3. 然后从终端打开Xcode:
        open -a Xcode

      要对此进行测试,您可以在构建中包含一些记录解释器版本或可用 gem 的内容。

      【讨论】:

      • 使用open -a Xcode 打开XCode 和通过dock 或聚光灯打开XCode 有区别吗?只有当我通过open -a Xcode 打开 XCode 时,我的运行脚本才会成功构建。当我不通过命令行打开它时,我得到的错误让我相信 XCode 正在使用 2.3 而不是我的 .rvm Ruby 版本 2.7.0 运行我的脚本
      【解决方案5】:

      我也遇到过类似的情况,但是正在运行的脚本有一个 shebang 行,指的是系统安装的 Ruby。

      #!/usr/bin/ruby
      

      我的解决方案可能危险,将 /usr/bin/ruby 替换为 RVM 安装的 Ruby 的符号链接。

      这是我采取的步骤:

      1. 安装多用户 RVM(https://rvm.io/rvm/install 中的 sudo 选项)
      2. 使用“设置”应用(设置 > 用户和组)将自己添加到 rvm 组。
      3. 注销并重新登录以确保操作系统尊重组成员身份。
      4. 从命令行安装我需要的 gem。由于我现在是 rvm 组中的 RVM 经理,因此这会影响 /usr/local/rvm 下的内容。
      5. /usr/bin/ruby 移开,并将RVM 默认Ruby 符号链接到其位置。 (这是危险的部分。如果程序假设它们将使用系统安装的版本,则可能会导致问题。)

      为了替换符号链接,我做了:

      sudo mv /usr/bin/ruby /usr/bin/system_ruby
      sudo ln -s /usr/local/rvm/rubies/default/bin/ruby /usr/bin/ruby
      

      完成此操作后(当 Xcode 未运行时),下次我在 Xcode 中构建项目时,脚本使用了我与 RVM 一起安装的 Ruby。

      【讨论】:

        【解决方案6】:

        我也遇到了这个问题,因为我想使用 xcpretty。我最终执行以下操作以指向正确的 gem 文件夹

        $RUBYPATH=$(eval ~/.rvm/bin/rvm info | grep "GEM_HOME:" | awk -F '"' '{print $2}')
        

        您想要的任何宝石都将在此文件夹中。

        如果你只是想要你的 ruby​​ 主路径:

        $RUBYPATH=$(eval ~/.rvm/bin/rvm info | grep "MY_RUBY_HOME:" | awk -F '"' '{print $2}')
        

        xcpretty 在我的场景中位于 bin/ 中的第一个选项下,如下所示。 所以对我来说,我最终做了以下事情:

        $RUBYPATH=$(eval ~/.rvm/bin/rvm info | grep "GEM_HOME:" | awk -F '"' '{print $2}')
        RUBY_BIN_PATH=${RUBY_PATH}"/bin/" 
        XCPRETTY=$RUBY_BIN_PATH"xcpretty"
        eval $XCPRETTY
        

        您可以通过以下方式找到您的 ruby​​ 命令在哪里 其中

        【讨论】:

          【解决方案7】:

          如果您使用rbenv,您可以在构建阶段脚本中的所有内容之前添加以下行:

          export PATH=~/.rbenv/shims:$PATH
          

          【讨论】:

            猜你喜欢
            • 2023-03-11
            • 1970-01-01
            • 2015-09-14
            • 2016-04-15
            • 2014-11-24
            • 1970-01-01
            • 2014-08-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多