Ruby

индекс
128,98

Установка 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
8 февраля 2008, 03:05
24

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

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

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

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

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

Я не утверждаю, что сюда класть однозначно удобнее других вариантов. Кому-то удобнее так, кому-то по другому. Мне оказалось удобнее именно тем, что все лежит в репозитарии и для работы проекта у другого девелопера на другой машине достаточно сделать чекаут проекта.
0
blind #
Имхо VPS сейчас настолько дешевы, что намного проще и быстрее использовать именно их, а не шаред-хостинги.
Насчет шаред, для рельсов лучший пожалуй hostingrails.com, худший - godaddy ( aka страшный_сон ). но и на godaddy помогли все те же гемы, перенесенные в $RAILS_ROOT/vendor/plugins/gems и rake rails:freeze:gems
0
danchenkov #
Некоторые гемы требуют прав администратора (mysql, sqlite3), во всяком случае, на моём хостинге. Достаточно намучившись правками Makefile, вспомнил, что в rails3 есть bundler (установился без проблем). Прописанные в Gemfile гемы устанавливаются так: bundle install.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.