geektimes

Как рубисту пережить апдейт OSX 10.10 Yosemite

  • вторник, 21 октября 2014 г. в 03:10:46
http://habrahabr.ru/post/240945/

На днях вышла очередная версия OSX 10.10 Yosemite, и если для обычных пользователей маков вопрос «обновляться или нет» не стоит, то разработчики подобным вопросом вполне могут задаться. Редкий большой апдейт прошлых лет не приносил нам тех или иных проблем с софтом, библиотеками и консолью. Не может похвастаться отсутствием проблем и нынешнее обновление.

Одним из лучших советов тут конечно было бы подождать месяц-другой и только затем обновляться — избавит от многих проблем и потери времени. Но ждать не хочется, а посему после обновления у вас гарантированно всё сломается (речь далее в основном идёт о ruby и rails): будут выскакивать seg fault'ы, не будут собираться некоторые гемы, возникнут проблемы со скриптами в консоли.
Исправление некоторых проблем нагуглить будет легко, а для некоторых предлагают лишь хаки в виде задания дополнительных параметров компиляции и переменных окружения.

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

  1. Первым делом после обновления OSX запустите Xcode, установите обновления и согласитесь с новой лицензией.
  2. Xcode почему-то в апсторе доступен только 6.0.1, хотя для нормальной работы в Yosemite требуется 6.1, поэтому скачайте и установите Xcode 6.1 по этой ссылке, после чего в консоли выполните
    xcode-select --install
    

  3. В Yosemite сделали что-то с консолью, из-за чего переменные окружения в текущей сессии терминала и переменные окружения при выполнении скриптов/программ различаются, а если точнее, то изменения, внесённые в PATH в ~/.bashprofile или ~/.zshrc не будут подхватываться. В чём проблема, я не знаю, но на практике оказываются как бы 2 переменные PATH: та, которая содержит изменения из вашего ~/.bashrc, и та, которая в систему по дефолту.
    Из-за этого в консоли начинают происходить множество косяков, о которых жалуются повсюду в интернетах. Чтобы избежать непонятных проблем, в настройках консоли нужно явно прописать login shell "/usr/bin/login -f имя_вашего_пользователя".

  4. Далее следует обновить homebrew, который у вас работать не будет из-за прописанной в нём 1.8 версии руби.
    cd /usr/local
    git pull
    

  5. Следующим пунктом будет установка gcc и его зависимостей, если он у вас раньше не стоял
    brew install gcc
    

  6. Пора обновлять пакеты homebrew.
    brew upgrade
    

  7. Что-то может быть до сих пор не так, поэтому убедитесь, что brew doctor не выдаёт никаких проблем.
  8. Обновляем pow, т.к. в Yosemite выпилили какие-то deprecated api, используемые в старом pow'е.
    curl get.pow.cx | sh
    

  9. Теперь можно переустановить руби
    rvm reinstall 2.1.3
    

  10. И последним пунктом будет постгрес, если вы его конечно используете. В Yosemite он у вас он перестанет запускаться, и чтобы его починить, создайте три каталога
    mkdir /usr/local/var/postgres/pg_tblspc
    mkdir /usr/local/var/postgres/pg_twophase
    mkdir /usr/local/var/postgres/pg_stat_tmp
    
    touch /usr/local/var/postgres/pg_tblspc/.keep
    touch /usr/local/var/postgres/pg_twophase/.keep
    touch /usr/local/var/postgres/pg_stat_tmp/.keep
    



После произведённых выше манипуляций bundle update в вашем проекте наконец-то должен корректно отработать и без ошибок собрать все гемы.
Приятной работы.

P.S. Дополнения из комментариев:
  • Перед обновлением OSX выполните brew update && brew upgrade
  • По поводу п.3 — переменные окружения нужно перенести в ~/.profile.