2013-04-02 2 views
8

В xcode У меня есть фаза сборки сценария запуска, которая запускает рубиновый скрипт. Тем не менее, похоже, что xcode пытается запустить его, используя версию mac 1.8 по умолчанию, но не последнюю версию. Учитывая, что для сценария требуется драгоценный камень, он не работает с требованием ошибки, а путь в ошибке указывает на /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/Как сделать xcode использовать правильную версию ruby ​​при запуске скрипта?

Очевидно, что 1.8 в этом пути вызывает у меня подозрение.

Если я открываю терминал и запускаю команду ruby -v, тогда он правильно возвращает 2.0.0p0, который я установил и установил по умолчанию с использованием RVM.

Как я могу получить Xcode для поиска в нужном месте? Или я неправильно интерпретирую эту ошибку?

Update:

Чтобы дать немного больше информации, вот точная ошибка, компилятор бросает:

/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

У меня есть аналогичные проблемы. Вы нашли решение? – poshaughnessy

+0

Я на самом деле решил, что не стоит времени, чтобы решить и запустить скрипт за пределами xcode –

+0

Я узнал, что если я запустил Xcode из терминала, он работает с новой версией, но если я запустил его из приложений, он будет работать с 1.8. Последний ответ мне помог. – Spire

ответ

1

Я использовал это, чтобы запустить Xcode с переводчиком другого, чем по умолчанию системный переводчик:

  1. Закройте Xcode, если он открыт и заходит в ваш терминал.
  2. Активируйте rvm, который хотите использовать.
    rvm use 2.0.0p0
  3. Затем откройте Xcode из терминала:
    open -a Xcode

Чтобы проверить это, вы можете включить что-то в вашей сборке, вошедшего версию интерпретатора, или доступных драгоценных камней.

1

Если у вас есть Xcode, выведите переменные окружения, IIRC, $PATH, установленный Xcode, отличается от $PATH, который вы загружаете в обычный сеанс терминала.

Это оставляет вас с (по крайней мере) два способа идти о решении проблемы:

  1. Вы можете изменить свой сценарий, чтобы указать на РВМ установленный рубин непосредственно. Это может быть лучше, если ваш скрипт будет работать на нескольких системах (даже если он идет вразрез с тем, как rvm обещает работать).

  2. Согласно комментарию Питера Хосея на вопрос Криса Хэнсона в вопросе this, вы можете установить переменные среды в ~/.MacOSX/environment.plist, которые будут применяться ко всем запускаемым процессам.

1

У меня была схожая ситуация, но выполняемый сценарий имел строку shebang, относящуюся к установленному системой Ruby.

#!/usr/bin/ruby 

Мое решения, которое может быть опасным , должны было заменить /usr/bin/ruby с линком на Ruby, установленный на РВМ.

Вот шаги, которые я взял:

  1. Установите многопользовательский RVM (в sudo вариант из https://rvm.io/rvm/install)
  2. Добавить себя в rvm группе с приложением Настройки (Settings> Пользователи и группы).
  3. Выйдите из системы и убедитесь, что члены группы соблюдают ОС.
  4. Установите драгоценные камни, которые мне нужны из командной строки. Поскольку я теперь менеджер 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, сценарий использовал Ruby, который я установил с RVM.

1

Предполагая, что вы указываете свое рубиновое управление версиями rvm в своем проекте (и, я думаю, вы должны быть), я думаю, что это более общеприменимый ответ, чем настоящие.

В общих чертах, в сценарии оболочки, вы должны

# 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.

0

У меня тоже была эта проблема, так как я хотел использовать 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 

Вы можете узнать, где ваша команда рубин заранее, делая который

Смежные вопросы