12

在 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
4

7 回答 7

3

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

于 2018-08-21T00:44:40.213 回答
2

假设您在项目中指定您的 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 .

我在这个答案中更详细地介绍了这一点。

于 2014-10-07T14:59:18.203 回答
2

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

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

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

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

于 2013-04-06T20:23:29.523 回答
1

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

#!/usr/bin/ruby

我的解决方案(可能很危险/usr/bin/ruby)是用 RVM 安装的 Ruby 的符号链接替换。

以下是我采取的步骤:

  1. 安装多用户 RVM(sudo来自https://rvm.io/rvm/install的选项)
  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。

于 2013-08-22T19:17:56.160 回答
1

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

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

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

于 2013-04-06T17:43:49.743 回答
0

我也有这个问题,因为我想使用 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

你可以通过 which 找到你的 ruby​​ 命令在哪里

于 2016-10-25T08:14:37.690 回答
0

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

export PATH=~/.rbenv/shims:$PATH
于 2021-07-01T10:47:33.990 回答