如何让xcode在运行脚本时使用正确版本的ruby?

时间:2013-04-02 23:33:55

标签: ruby xcode rvm

在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

7 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分: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 .

我在此answer中的更多生产就绪细节中介绍了这一点。

答案 2 :(得分:1)

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

  1. 如果Xcode已打开则退出Xcode并转到您的终端。
  2. 激活您要使用的rvm rvm use 2.0.0p0
  3. 然后从终端打开Xcode:
    open -a Xcode
  4. 要对此进行测试,您可以在构建中包含记录解释器版本或可用宝石的内容。

答案 3 :(得分:1)

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

#!/usr/bin/ruby

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

以下是我采取的步骤:

  1. 安装多用户RVM(来自https://rvm.io/rvm/installsudo选项)
  2. 使用设置应用(设置>用户和群组)将自己添加到rvm群组。
  3. 注销并重新登录以确保操作系统遵守组成员资格。
  4. 从命令行安装我需要的宝石。因为我现在是rvm组中的RVM管理员,所以这会影响/usr/local/rvm下的内容。
  5. 移开/usr/bin/ruby并将RVM默认Ruby符号链接到其位置。 (这是危险的部分。如果程序假设他们将使用系统安装的版本,则可能会导致问题。)
  6. 要替换符号链接,我做了:

    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。

答案 4 :(得分:1)

您还可以执行rvm use system切换到默认的macos ruby​​,然后使用sudo安装gems。似乎对我来说最简单。

答案 5 :(得分:0)

我也有这个问题,因为我想使用xcpretty。我最终在下面做了以下指向正确的gem文件夹

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

你想要的任何宝石都在这个文件夹中。

另外,如果你只想要ruby home path:

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

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

$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命令的位置    哪个

答案 6 :(得分:0)

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

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