- PVSM.RU - https://www.pvsm.ru -

Обзор команд Ruby on Rails

Доброго времени суток читатель !

15 июня в севастопольская команда Kodo организовывает двухдневные курсы railskickstart [1], посвященные, как не сложно догадаться, экосистеме Ruby on Rails [2] и связанные с ней технологиями. Наша цель – не демонстрировать 15-минутный блог и после этого говорить, как все замечательно. Такого материала в просторах интернета огромные кучи. Мы же хотим рассказать о вещах, которые остаются за кадром, о реальном опыте использования и даже случаях, когда лучше не использовать RoR. Да, вам это не показалось – есть очень много случаев, когда использовать рельсы не самый лучший вариант. Однако, стоит понимать, что 2 дня — это очень малый промежуток времени, за который можно только прикоснуться к чему-то, но не понять. Поэтому мы запускаем курс материалов, направленных на знакомство с Rails. Надеемся, что прочитав их, будущий участник будет говорить с нами на одном языке, и обрастет многочисленными вопросами, на который мы с радостью ответим. Если же вы не живете в г. Севастополе или не можете прийти к нам 15 и 16 числа, то это совсем не повод не читать их(статьи) и не задавать возникшие вопросы и пожелания в комментариях.

Первый материал будет посвящен работе в терминале. Овладев набором команд, Вы с легкостью сможете создавать различные компоненты системы, выполнять команды и узнавать различную информацию. Все примеры будут приведены для версии 3.х.х

Итак поехали. После установки ruby on rails вам будет доступна команда rails. Одной из особенностей использования команды rails – если вы не знаете как ее использовать, запустите ее без параметров.

rails

И тут проявляется интересная особенность. Если вы запустили ее в обычном каталоге, который не является rails приложением, то вся информация была посвящена всевозможному созданию приложения. Собственно вне каталога приложения принимает только один аргумент new с последующим именем будущего сайта. Однако пользователь может указать несколько параметров, которые внесут коррективы в строение будущего приложения. Стоит обратить внимания на такие параметры:

-О не использовать orm ActiveRecord [3]
-T не использовать тест-юниты
-d database_type – указать не стандартный (sqlite) тип базы данных

Из собственного опыта могу сказать, что обычно создание приложения происходит такой командой

rails new anti_bloggy -T -d mysql

Создается приложение без стандартных тест юнитов(используем более мощный и элегантный RSpec [4]) с базой данных mysql. Для ценителей PostgreSQL

rails new your_app -T -d postgresql

Небольшой совет, если вы планируете просто создать приложение для практического ознакомления с материалом – создайте его без параметров, просто rails new test_app
Это сэкономит вам время на первоначальной настройке приложения(тоже важная тема, но всему свое время).

Перейдя в созданное приложение, наша команда rails измениться. Теперь она с охотой принимает большое количество аргументов. Первый и один из важных – это generate (имеет сокращенную версию g). Его имя говорит само за себя – он создает элементы приложения. Дабы ознакомится со списком того, что можно создать с помощью этой команды — запустите rails g

Список достаточно большой и самое главное, он может быть расширен внешними библиотеками. Однако рассмотрим наиболее важные – model, controller, migration, resource.

rails g model — создает модель – ключевую единицу приложения, которая хранит информацию. Рассмотрим такую простую команду

rails g model car name description:text price:decimal year:integer:index

Команда создаст модель, у которой есть поле name – строка(varchar 255). Особенностью rails генератора от версии 3.2 – поля без указания типа данных по-умолчанию строки. То есть


rails g model car name

и

rails g model car name:string

эквивалентны. Также у модели Car есть поля description(текст), price(число с плавающей точкой) и year(целое число с индексом в базе данных).

Переходим к созданию контролеров

rails g controller home index about faq

создаст контролер home_controller.rb в app/controllers с тремя страницами index, about и faq в каталоге app/views/home. А также добавит информацию об контролере в файл роутинга config/routes.rb.

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

rails g migration add_price_field

В каталоге db/migrations добавится файл с миграцией. Однако, у команды создания миграций есть небольшая магия, которую можно вызвать при правильном использовании имен. Допустим существует модель car и соответствующая таблица cars. И нам необходимо добавить поля color(строка) и weight(целое)

rails g migration add_color_and_wight_to_car color weight:integer

Данная команда выполнить абсолютно всю работу за вас – создаст миграцию, укажет в миграции, что необходимо добавить два поля в таблицу cars, одно из которых строка(как было указано раньше, поле без типа по-умолчанию строки) и целое число. Весь секрет таится в имени миграции, которые анализируется и если окончание заканчивается ***_to_model_name автоматически понимает, что нужно изменить таблицу служащую model_name.

Еще один приятный генератор – resource. Генерирует модель и обслуживающий ее контролер. Получается микс из генераторов model & controller.

От команды generate стоит перейти к ее противоположности destroy(d сокращение). Она призвана удалять созданный по ошибке контент. Например,

rails d model car

удалит модель и миграцию относящуюся к Car

Теперь стоит перейти к командам, которые позволяют получить информацию или запустить какие-то процессы. Очень популярная в данном сегменте rails console(c сокращение). Запустив в нее вы попадете в REPL [5] с подгруженными моделями и библиотеками вашего приложения. По-умолчанию, загружается development среда, однако добавив вторым аргументом имя среды — вы получите repl c необходимыми условиями. Например

rails c test

Для запуска сервера для разработки существует команда rails server(s в сокращении)


rails s #запустили сервер в development среде с портом 3000


rails s -port 1234 -e test #запустили сервер в test среде с портом 1234

На этом стоит завершить обзор команды rails и перейти с двум другим немаловажным командам – rake и bundle. Первая команда относится к библиотеке rake [6]. Этот инструмент предоставляет возможность запуска последовательности команд объединяемых в отдельные task-и. RoR очень активно использует их для своих нужд. Ниже приведен список популярных команд


rake db:create # создает базу данных


rake db:drop #удаляет базу данных


rake db:migrate #запускает новые миграции


rake db:rollback #откатывает последнюю миграцию


rake db:rollback STEP=3 #откатывает 3 последних миграций


rake db:setup #создает базу данных, запускает все миграции


rake test #запускает тесты


rake routes #показывает карту роутинга


rake -T #показывает список доступных task-ов

Если есть необходимость выполнить несколько task-ов подряд просто указывайте их через пробел

rake db:migrate db:test:prepare

выполнит сначала db:migrate, потом db:test:prepare

Команда bundle относится к библиотеке bundler [7], которая отвечает подключение внешних библиотек. Достаточно подробно об ней написано здесь [8]. Ниже приведен список наиболее популярных вариантов использования


bundle #bundle install – устанавливает необходимые библиотеки


bundle update gem_1 gem_2 # обновляет gem-ы gem_1, gem_2


bundle exec another_command arg1 arg2 # запускает another_command с аргументами arg1 arg2 предварительно загрузив gem-ы.

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

Автор: jalkoby

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/terminal/35088

Ссылки в тексте:

[1] railskickstart: http://railskickstart.com.ua/

[2] Ruby on Rails: http://rubyonrails.org/

[3] ActiveRecord: http://guides.rubyonrails.org/active_record_querying.html

[4] RSpec: https://www.relishapp.com/rspec

[5] REPL: http://ru.wikipedia.org/wiki/REPL

[6] rake: http://rake.rubyforge.org/

[7] bundler: http://gembundler.com/

[8] здесь: http://habrahabr.ru/company/engineyard/blog/172807/

[9] Источник: http://habrahabr.ru/post/180775/