Ruby on Rails

Краткое руководство по установкe сабжа на FreeBSD с помощью RVM.

 

Все как один рекомендуют ставить bash, и это правильно, действительно не все команды из манулов выполняются в других оболочках, поэтому ставим её.

Установка RVM.
Так как имеет место быть нереальный зоопарк версий Ruby, причем на обратную совместимость эих версий никто не заморачивался, нам необходимо иметь их более одной. Во-первых, во время изучения предмета Ruby потребуется несколько версий, так как каждая мурзилка написана для определенной версии. Во-вторых, во время разработки понадобится использовать разные наборы. Поэтому ставим RVM.
RVM — Ruby Version Manager (менеджер управления пакетами в ruby).
Установка RVM возможна либо из пакета, либо
curl -L https://get.rvm.io | bash
Согласно всем мануалам RVM работает сразу после установки, но только не у меня. Дело в том, что когда мы ставим RVM из-под root, он ставится по-любому в /usr/local/rvm. В файл .bashrc я внес строчку
[[ -s "/usr/local/rvm/scripts/rvm" ]] && . "/usr/local/rvm/scripts/rvm".
Тогда rvm -v мне наконец-то выдала ответ:
rvm 1.29.3 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]

Если же мы используем curl и ставим из-под обычного пользователя, тогда установка происходит в каталог ~/.rvm. Тогда для работы с rvm достаточно сделать
source ~/.rvm/scripts/rvm

Установка Ruby.

Для начала смотрим актуальные версии Ruby в репозитории:

rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.7]
[ruby-]2.3[.4]
[ruby-]2.4[.1]
ruby-head

# for forks use: rvm install ruby-head- --url https://github.com/github/ruby.git --branch 2.2

# JRuby
jruby-1.6[.8]
jruby-1.7[.27]
jruby[-9.1.13.0]
jruby-head

# Rubinius
rbx-1[.4.3]
rbx-2.3[.0]
rbx-2.4[.1]
rbx-2[.5.8]
rbx-3[.84]
rbx-head

# Opal
opal

# Minimalistic ruby implementation - ISO 30170:2012
mruby-1.0.0
mruby-1.1.0
mruby-1.2.0
mruby-1[.3.0]
mruby[-head]

# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2012.02]

# Topaz
topaz

# MagLev
maglev[-head]
maglev-1.0.0

# Mac OS X Snow Leopard Or Newer
macruby-0.10
macruby-0.11
macruby[-0.12]
macruby-nightly
macruby-head

# IronRuby
ironruby[-1.1.3]
ironruby-head

Некроверсии пока ставить не будем, поставим несколько последних.
rvm install 2.4.1
rvm install 2.3.4
rvm install 2.2.7
rvm install 2.1.10

 

Посмотрим результат:
rvm list

rvm rubies

=> ruby-2.1.10 [ x86_64 ]
ruby-2.2.7 [ x86_64 ]
ruby-2.3.4 [ x86_64 ]
* ruby-2.4.1 [ x86_64 ]

# => - current
# =* - current && default
# * - default

Теперь выберем версию 2.3.4

rvm use 2.3.4

Поставим в неё последние рельсы.
gem install rails

Однако нам, например, нужны еще версии rails 3.2.0. и 4.1.0. Сначала создадим соответствующие гемсеты:
rvm gemset create rails320 rails410

Переходим в первый и ставим рельсы:
rvm 2.3.4@rails320
gem install rails -v 3.2.0

Следующий:
rvm 2.3.4@rails410
gem install rails -v 4.1.0

Проверить версию:
[ggg@BSD1 ~]$ rvm 2.3.4@rails320
Using /usr/home/ggg/.rvm/gems/ruby-2.3.4 with gemset rails320
[ggg@BSD1 ~]$ rails -v
Rails 3.2.0
[ggg@BSD1 ~]$ rvm 2.3.4@rails410
Using /usr/home/ggg/.rvm/gems/ruby-2.3.4 with gemset rails410
[ggg@BSD1 ~]$ rails -v
Rails 4.1.0
[ggg@BSD1 ~]$ rvm 2.3.4@default
Using /usr/home/ggg/.rvm/gems/ruby-2.3.4
[ggg@BSD1 ~]$ rails -v
Rails 5.1.4

Итак, мы теперь умеем создавать отдельные гемсеты не только для создания определенного набора гемов, но и для использования определенной версии rails с каждым гемсетом. Таким образом, для использования определенной версии ruby с конкретной версией рельс нам надо создать соответствующий гемсет и установить в него нужную версию rails.

Управление проектами.
Создадим в домашнем каталоге подкаталог для проектов /$HOME/rupyproj, в нем каталог под наш гемсет, например /$HOME/rupyproj/ruby234rs320. В этом каталоге поместим файлы .ruby-gemset и ruby-version с соответствующим содержимым.
[ggg@BSD1 ~]$ mkdir ~/rubyproj
[ggg@BSD1 ~]$ mkdir ~/rubyproj/ruby234rs320
[ggg@BSD1 ~]$ cd ~/rubyproj/ruby234rs320
[ggg@BSD1 ~/rubyproj/ruby234rs320]$ echo 'rails320' > .ruby-gemset
[ggg@BSD1 ~/rubyproj/ruby234rs320]$ echo 'ruby-2.3.4' > .ruby-version
[ggg@BSD1 ~/rubyproj/ruby234rs320]$
Проверим получившиеся настройки. Сначала выйдем из этого каталога и зайдем обратно, чтобы обновить переменные окружения. После чего проверим версии применяющихся в этом каталоге программ.
[ggg@BSD1 ~/rubyproj/ruby234rs320]$ cd ~
[ggg@BSD1 ~]$ cd ~/rubyproj/ruby234rs320
[ggg@BSD1 ~/rubyproj/ruby234rs320]$ ruby -v
ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-freebsd10.3]
[ggg@BSD1 ~/rubyproj/ruby234rs320]$ rails -v
Rails 3.2.0

Очень хорошо. Мы видим, что для всех проектов в эом каталоге будет применяться указанные версии ruby и Rails. Можно создавать проект и запускать сервер.
[ggg@BSD1 ~/rubyproj/ruby234rs320]$ rails new project1
[ggg@BSD1 ~/rubyproj/ruby234rs320]$ cd ~/rubyproj/ruby234rs320/project1
[ggg@BSD1 ~/rubyproj/ruby234rs320/project1]$ rails s

Зайдем на наш сервер по порту 3000:

ruby pic1

рис.1

 

Видим, что наш сервер работает, имеем именно то окружение, что и планировали.
Таким образом, мы можем поддерживать наш зоопарк Ruby on Rails в примерном порядке, создавая под каждый гемсет отдельные каталоги с соответствующими настройками.