Доброго времени суток читатель !
15 июня в севастопольская команда Kodo организовывает двухдневные курсы railskickstart, посвященные, как не сложно догадаться, экосистеме Ruby on Rails и связанные с ней технологиями. Наша цель – не демонстрировать 15-минутный блог и после этого говорить, как все замечательно. Такого материала в просторах интернета огромные кучи. Мы же хотим рассказать о вещах, которые остаются за кадром, о реальном опыте использования и даже случаях, когда лучше не использовать RoR. Да, вам это не показалось – есть очень много случаев, когда использовать рельсы не самый лучший вариант. Однако, стоит понимать, что 2 дня — это очень малый промежуток времени, за который можно только прикоснуться к чему-то, но не понять. Поэтому мы запускаем курс материалов, направленных на знакомство с Rails. Надеемся, что прочитав их, будущий участник будет говорить с нами на одном языке, и обрастет многочисленными вопросами, на который мы с радостью ответим. Если же вы не живете в г. Севастополе или не можете прийти к нам 15 и 16 числа, то это совсем не повод не читать их(статьи) и не задавать возникшие вопросы и пожелания в комментариях.
Первый материал будет посвящен работе в терминале. Овладев набором команд, Вы с легкостью сможете создавать различные компоненты системы, выполнять команды и узнавать различную информацию. Все примеры будут приведены для версии 3.х.х
Итак поехали. После установки ruby on rails вам будет доступна команда rails. Одной из особенностей использования команды rails – если вы не знаете как ее использовать, запустите ее без параметров.
rails
И тут проявляется интересная особенность. Если вы запустили ее в обычном каталоге, который не является rails приложением, то вся информация была посвящена всевозможному созданию приложения. Собственно вне каталога приложения принимает только один аргумент new с последующим именем будущего сайта. Однако пользователь может указать несколько параметров, которые внесут коррективы в строение будущего приложения. Стоит обратить внимания на такие параметры:
-О не использовать orm ActiveRecord
-T не использовать тест-юниты
-d database_type – указать не стандартный (sqlite) тип базы данных
Из собственного опыта могу сказать, что обычно создание приложения происходит такой командой
rails new anti_bloggy -T -d mysql
Создается приложение без стандартных тест юнитов(используем более мощный и элегантный RSpec) с базой данных 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 с подгруженными моделями и библиотеками вашего приложения. По-умолчанию, загружается 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. Этот инструмент предоставляет возможность запуска последовательности команд объединяемых в отдельные 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, которая отвечает подключение внешних библиотек. Достаточно подробно об ней написано здесь. Ниже приведен список наиболее популярных вариантов использования
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