在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
答案 0 :(得分:2)
如果Xcode打印出环境变量IIRC,则Xcode设置的$PATH
与常规终端会话中加载的$PATH
不同。
这使您(至少)有两种方法可以解决问题:
您可以编辑脚本以直接指向rvm安装的ruby。如果您的脚本必须在多个系统上工作(即使它确实违反了rvm承诺的工作方式),这可能会更好。
根据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:
rvm use 2.0.0p0
open -a Xcode
要对此进行测试,您可以在构建中包含记录解释器版本或可用宝石的内容。
答案 3 :(得分:1)
我有类似的情况,但正在运行的脚本有一个shebang行,指的是系统安装的Ruby。
#!/usr/bin/ruby
我的解决方案可能是危险,是用{RVM安装的Ruby的符号链接替换/usr/bin/ruby
。
以下是我采取的步骤:
sudo
选项)rvm
群组。rvm
组中的RVM管理员,所以这会影响/usr/local/rvm
下的内容。/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。
答案 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