Быстрое разверытвание среды разработки для Ruby on Rails

в 14:12, , рубрики: ruby on rails, vagrant, virtualbox, Песочница, метки: , ,

Привет читатели. Если вам надоело постоянно устанавливать на новых машинах с разными ОС одно и тоже rails окружение с десятками зависимостей и кучей пакетов, то предлагаю вам ознакомится с интересным решением от rails-core разработчиков. На вашей хост-машине нужно иметь лишь Vagrant и Virtual Box.

Проблема

Так случилось, что в нашей компании возникла проблема установки всего необходимого окружения на разные оперирующие системы, Mac OS X и Linux в частности.
Казалось бы это тривиальная задача под Linux, немного сложнее под Mac, но всё оказалось еще сложнее, т.к. проект у нас не стандартный. Эдакая адская смесь дрюпала и рельсов. Проект как раз в процессе мигрирования на рельсы. И подружить это всё под маками оказалась не такой простой задачей для фронт-энд программистов, не искушенных в настройке окружения. Ставить убунту или другой линукс они категорически отказывались.

Решение

imageimage
Ну что ж. Как самое быстрое решение был выбран такой замечательный проект как rails-dev-box
Этот проект автоматизируют установку для разработки ядра Ruby on Rails. Для наших нужд это подходит как нельзя кстати.
Нам потребуется иметь установленный Virtual Box и руби джем Vagrant. Оба установить достаточно легко.
После этого нам лишь нужно выполнить пару команд:

host:~$ git clone https://github.com/rails/rails-dev-box.git
host:~$ cd rails-dev-box
host:~$ vagrant up

Всё. После чего можно зайти по ssh в уже настроенную ubuntu:

vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)
...
vagrant@rails-dev-box:~$

В витуальной системе уже установлено всё что надо, за исключением php и веб-сервера:

  • Git
  • RVM
  • Ruby 1.9.3 (binary RVM install)
  • Bundler
  • SQLite3, MySQL, and Postgres
  • System dependencies for nokogiri, sqlite3, mysql, mysql2, and pg
  • Databases and users needed to run the Active Record test suite
  • Node.js for the asset pipeline
  • Memcached

Установку php и nginx мы не будем рассматривать, это выходить за пределы данной статьи. Это очень просто сделать в линуксе.

Нам лишь осталось скопировать проект в папку с rails-dev-box на хост системе и запустить rails server из под vagrant:

vagrant ssh
cd /vagrant/my_project
bundle exec unicorn -E development -D

Виртульная система и хост-системы видят одну и ту же папку, что позволяет нам редактировать её своим любимым редактором, а страницы открывать как и раньше через http://localhost:3000
В случае с php нужно еще прокинуть порт 1080 (80 порт мы прокинуть не можем, т.к. тогда нам нужен будет рут доступ)
Это делается довольно просто. Нужно вписать в Vagrantfile лишь одну строку:

config.vm.forward_port 80, 1080

Каково было мое удивление, когда оказалось что страницы из Rails грузятся чуть ли не по минуте. Drupal работал как ни в чем не бывало. Скорость почти неотличима от родной файловой системы.
Оказалось, что VirtualBox Shared Folders, которые Vagrant использует по умолчанию, очень и очень медленные.
Бенчмарк из документации Vagrant:

VirtualBox Shared Folders:         5m 14s
Host File System:                     10s
Native VM File System:                13s
NFS Shared Folders:                   22s
NFS Shared Folders (warm cache):      14s

Как видно, нам ничего не остается как только использовать NFS. В Mac OS этот демон уже предустановлен. Установка в линуксе опять же банальна — нужно установить пакет.
После этого правим наш Vagrantfile, добавляем строки:

config.vm.share_folder "v-root", "/home/vagrant/shared-folder", ".", :nfs => true
config.vm.network :hostonly, "33.33.33.100"

Опция Host-only используется для создания второго виртуального адаптера, через него и будет работать nfs.
Теперь надо перезагрузить виртуальную машину и проект в виртуальной системе уже будет находиться в /home/vagrant/shared-folder

Запускаем юникорн и теперь видим что страницы загружаются с положенной скоростью.

Дополнительно

Связка Virtual Box и Vagrant работает замечательно. Вы можете написать дополнительные рецепты(используется puppet), чтобы автоматизировать всё вышеописанное, включая клонирование репозитория вашего проекта со стороннего сервиса, а также настройку конфигов nginx/apache, php, unicorn

Спасибо за внимание и приятной разработки.

Ссылки

rails-dev-box github source code
Vagrant and NFS Shared Folders

Автор: alex_bel

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js