在Xcode我有一个“运行脚本”创建运行Ruby脚本阶段。 然而,似乎Xcode是尝试使用默认MAC 1.8版的红宝石,而不是最新版本的运行它。 考虑到脚本需要的宝石,它与错误指向一个需要的错误和路径失败/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中打印出来的环境变量,IIRC,在$PATH
通过Xcode的设置是不同的$PATH
您在常规终端会话负载。
这使你有(至少)两个方法去解决这个问题:
您可以编辑的脚本直接指向RVM安装红宝石。 这可能是更好,如果你的脚本将不得不在多个系统上工作(即使它违背RVM如何承诺的工作)。
据克里斯·汉森的回答彼得Hosey的评论这个问题,你可以设置环境变量~/.MacOSX/environment.plist
将适用于您启动的所有进程。
假设你在你的项目中指定您的RVM红宝石版本(我想你应该是),我认为这是一个比现在的人更普遍适用的答案。
在广招,在你的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 .
我在这多生产准备详细讨论这个答案 。
我用这个来比默认的系统解释其他的解释器中运行的Xcode:
- 退出Xcode中,如果它是开放的,去你的终端。
- 激活你要使用的RVM。
rvm use 2.0.0p0
- 从终端然后打开Xcode中:
open -a Xcode
为了验证这一点,您可以在您的构建,它记录翻译的版本,或可用宝石的东西。
我也有类似的情况,但该脚本正在运行了认领线指的是系统安装的红宝石。
#!/usr/bin/ruby
我的解决方案,这可能是危险的 ,是取代/usr/bin/ruby
与RVM安装一个符号链接的红宝石。
下面是我采取的步骤:
- 安装多用户RVM(该
sudo
从选项https://rvm.io/rvm/install ) - 我加入了
rvm
与设置应用(设置>用户和组)组。 - 注销并重新登录在确保组成员是由OS尊重。
- 安装我的命令行所需要的宝石。 因为我现在是凭借在作为一个RVM经理
rvm
组,这会影响下的东西/usr/local/rvm
。 - 将
/usr/bin/ruby
的出路和符号链接默认RVM红宝石在它的位置。 (这是危险的部分。如果节目以为他们会使用系统安装的版本可能会导致问题。)
要更换符号链接,我所做的:
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的。
你也可以做rvm use system
,其切换到默认MAC OS红宝石,然后使用sudo安装宝石。 似乎是最简单的我。
我有这个问题还,因为我想用xcpretty。 我结束了在正确的宝石做的文件夹下面点以下
$RUBYPATH=$(eval ~/.rvm/bin/rvm info | grep "GEM_HOME:" | awk -F '"' '{print $2}')
无论宝石你想要将这个文件夹中。
此外,如果你只是想你红宝石主路径:
$RUBYPATH=$(eval ~/.rvm/bin/rvm info | grep "MY_RUBY_HOME:" | awk -F '"' '{print $2}')
xcpretty是斌的第一个选项在/在我的方案为波纹管。 所以对我来说我最终会做以下几点:
$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
你可以找出你的红宝石命令事先是做哪