войти зарегистрироваться

Ruby whois

индекс
108,30

Установка RubyGems на хостинге

Сегодня решил протестировать один из своих рельсовых проектов на хостинге. Дома-то работает всё круто, а вот в продакшн-режиме не захотело. Во-первых, оказалось, что рельсы на хостинге установлены не те, во-вторых, RubyGems старый. Ладно, хоть Ruby сам работал, и на том спасибо ((-:

Первым делом я решил обновить RubyGems, чтобы в дальнейшем избежать лишних вопросов от менеджера gem'ов. Делается это так:

  1. Первым делом, нужно придумать путь к своему личному репозиторию гемов. Пригодится, обещаю. По-умолчанию, в последних версиях предлагается путь вида /home/username/.gem/. Таким образом, нужно в консоли ввести:

    export GEM_HOME=~/.gem
  2. Затем нужно скачать последнюю версию RubyGems и, собственно, установить её. Устанавливать нужно в какое-нибудь укромное местечко внутри домашней директории. Я выбрал для этих целей ~/ruby/gem. Последнюю версию RubyGems можно скачать с официального сайта. Сейчас последняя стабильная версия — 1.0.1

    Выполняем команды:

    mkdir ~/temp 
    mkdir ~/ruby/gem 
    cd ~/temp 
    wget http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz 
    tar -zxf rubygems-1.0.1.tgz 
    cd rubygems-1.0.1 
    ruby setup.rb all --prefix=~/ruby/gem

    При удачно сложившихся обстоятельствах — установка прошла успешно. Чтобы проверить, введите в консоли gem. Если всё успешно — выведется помощь по этой команде. Возможно, однако, появление ошибки о ненайденном файле. В таком случае, необходимо экспортировать ещё одну переменную окружения — RUBYLIB следующей командой:

    export RUBYLIB=~/ruby/gem/lib

    Теперь заставим систему вызывать по слову gem только что установленный экземпляр:

    export PATH=~/ruby/gem/bin:$PATH
  3. Во время установки RubyGems был создан новый gem-репозиторий по адресу ~/.gem. Подскажем системе, что гемы теперь нужно таскать оттуда:

    export GEM_PATH=~/.gem

    Вы видите уже вторую переменную окружения, начинающуюся а GEM_. И обе они указывают на одну и ту же директорию, давайте разберёмся, зачем:

    • GEM_HOME указывает на директорию, в которую будет происходить установка новых гемов. При желании, можно при кадой установке добавлять параметр --install-dir, но лично мне лень, поэтому я предпочёл один раз установить переменную окружения.
    • GEM_PATH в свою очередь, указывает на директорию, в которой будет происходить поиск установленных гемов.

Всё. Установка RubyGems завершена. Если описание показалось вам недостаточным — задавайте вопросы, я постараюсь на них ответить.

комментарии (18)

  • Благодарю! Весьма дельная статья, может пригодится!
    Только один глупый вопрос - А что будет если саппорт хостинга ткнуть на тему "обновите gem и его gem'ы"?)
    • Это зависит от саппорта.

      Я отталкивался от соображения, что если саппорт обновит гемы один раз, ему это может понравиться (-: и потом он (без моего спроса!) может что-нибудь ещё сотворить с гемами, сделав систему снова несовместимой с моими приложениями. Поэтому, я решил что лучше будет мне самому один раз всё сделать «как надо».

      Да и просто хотелось чуть-чуть поработать в консоли ((-:
      • сделав систему снова несовместимой с моими приложениями
        а для предотвращения этого, вроде бы, некие стандартные средства предусмотрены.
        Да и просто хотелось чуть-чуть поработать в консоли ((-:
        А на своём компьютере консоль отрезана? :)
      • Специально для этого есть возможность указывать нужные версии гемов явным образом, см. документацию.
        • Для этого нужно, по-крайней мере, подключить локальный репозиторий гемов. Потому что устанвливать гемы нужной версии в системный у хостера почему-то (-: не позволено
    • Для этого существует rake gems:freeze
  • небольшой оффтоп: я так понимаю, что пост все равно связан с ruby on rails. не подскажите, что почитать про ruby on rails 2? Поставил себе, не могу совладать с relationships :(
    • relationships  — я так понял, Вы про associations. Тогда советую почитать документацию по рельсовому API. Если я Вас понял неправильно — поправьте меня (-:
      • правильно правильно. у меня просто еще на hibernate разработка ведется, там терминология другая
      • блин. спасибо, я тупень. объявил объект attribute и associations с ним и сижу ошибку ищу.
  • А где хоститесь?
    • Active Technologies
      • и как вам там?
        • Моим требованиям удовлетворяет (-:
          Чего не хватает (а такого немного) — легко прикручивается ручками (-:
  • Еще может оказаться удобнее потом перекинуть все из gems в vendor/plugins/gems (http://forum.net.ru/viewtopic.php?t=5214), чтобы засунуть в репозитарий целиком и синхронизировалось на production по одной и той же схеме.
    • Может быть, я вас недопонимаю, но путь мне кажется неверным. Надо бы $RAILS_ROOT/vendor/plugins/

      Но ваш случай, по-моему, неудобен тем, что для каждого приложения (у меня на этом сервере их несколько) необходимо устанавливать одни и те же гемы, а следуя моему пути, мы установим гемы лишь раз.
      • прямо из vendor/plugins/ рельсы не подхватывают. У меня работает только vendor/plugins/gems

        Я не утверждаю, что сюда класть однозначно удобнее других вариантов. Кому-то удобнее так, кому-то по другому. Мне оказалось удобнее именно тем, что все лежит в репозитарии и для работы проекта у другого девелопера на другой машине достаточно сделать чекаут проекта.
  • Имхо VPS сейчас настолько дешевы, что намного проще и быстрее использовать именно их, а не шаред-хостинги.
    Насчет шаред, для рельсов лучший пожалуй hostingrails.com, худший - godaddy ( aka страшный_сон ). но и на godaddy помогли все те же гемы, перенесенные в $RAILS_ROOT/vendor/plugins/gems и rake rails:freeze:gems
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.