Ruby on Rails + gem Device

Введение

Пользовательские библиотеки для Ruby называются гемами (gem). Фреймворк Ruby on Rails представляет собой, по большей части, всего лишь гем Rails, и работает по модели Model-View-Controller.

В этой статье будут описаны первые шаги создания портала с системой аутентификации на фреймворке Ruby on Rails.

К делу


Узнать последние актуальные версии Ruby и Rails можно на офф. сайтах: (Ruby) (Ruby on Rails)

Прежде всего понадобится менеджер версий Ruby - RVM (статья) и установленная с его помощью нужная версия Ruby (в нашем случае - 2.4.1)

rvm install 2.4.1

Создадим папку для будущего проекта и перейдем в нее.
Создадим гемсет - папку с набором скачанных гемов

rvm use ruby-2.4.1@rails5.1.3 --create

К слову, если после перезагрузки машины, заходя в папку с проектом, Вы столкнетесь с проблемой “Программа 'rails' на данный момент не установлена. Вы можете установить её ...”, то нужно указать RVM’у гемсет, который надо использовать:

rvm use ruby-2.4.1@rails5.1.3


Установим гем Rails нужной версии

gem install rails --version=5.1.3 --no-rdoc --no-ri

--no-rdoc --no-ri избавят от установки документации


Проверить установку “Рельсов” и версию можно командой

rails -v

Подготовка закончена, пришло время придумать название нового проекта и запустить процесс его создания (назовем ‘portal_systop’)

rails new portal_systop

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


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

rails server



в случае успешного запуска сервера увидим следующее:
  • локальный домен сервера http://localhost:3000
  • среда - development - удобна для разработки т.к. в ней отображается много отладочной информации, на рабочем же сервере опасно запускать портал в среде разработки, для этого во фреймворке существует среда production
  • сочетание клавиш для остановки сервера Ctrl-C



Перейдя по ссылке к указанному хосту увидим следующее - стандартная “заглушка” Rails-проекта:

Остановим сервер и создадим свою кастомную главную страницу:

rails generate controller Home index
Итак, этой командой создались:
  • контроллер home_controller.rb в директории app/controllers/
  • директория “вьюх” app/views/home/ и в ней один файл index.html.erb
  • запись в файле routes.rb

Список используемых роутов можно вызвать командой:

rake routes


Теперь созданную страницу можно найти по адресу http://0.0.0.0:3000/home/index (при запущенном сервере)

Сделать страницу корневой (открывающейся при обращении к домену) можно изменив строку в файле config/routes.rb



Контроль версий

Т.к. дальше пойдут серьезные изменения, целесообразно зафиксировать данное состояние проекта, создав коммит (снимок текущей структуры файлов проекта и их содержимого, к которому можно откатиться в любое время) с помощью Git’а (sudo apt install git -y)

git init # инициализация репозитория
git add . # добавление всех-всех изменений разом
git commit -m "initial commit" # создание коммита

Гем device

“Прикручивает” систему аутентификации и доступа к порталу. Т.к. devise является гемом, то добавим его в наш гемсет, создав строку в файле Gemfile:

gem 'devise', '~> 4.3'

и выполним команду

bundle install

Инициализируем devise в нашем проекте командой

rails generate devise:install


Выполним некоторые рекомендации инсталлера для девелопмент-среды:

добавим в файл config/environments/development.rb (адрес сервера и порт указаны для Gmail):

#DEVISE
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'website.com',
user_name: '<ваш_емейл_адрес>',
password: '<пароль_электронного_ящика>',
authentication: 'plain',
enable_starttls_auto: true
}

Создадим модель пользователя (назовем ‘User’):

rails generate devise User

как видим:
  • создался файл модели в папке app/models/
  • добавилась запись ‘devise_for :users’ в файл роутов
  • создался файл миграции, описывающий структурные изменения в БД

Откроем файл модели app/models/user.rb выставим нужные параметры:

В соответствии с моделью отредактируем файл миграции db/migrate/....rb (раскомментировав нужные строки)

Здесь описаны названия, типы и параметры столбцов будущей таблицы ‘users’.

Определяемся с БД (база данных)

По умолчанию в Рельсах стоит гем, позволяющий работать только с простенькой БД - sqlite3. Чтоб назначить, например, MySQL надо:
  • установить БД (MySQL)
  • установить гем, управляющий нужной БД (gem 'mysql2', '~> 0.4.8')
  • подправить конфиг config/database.yml

default: &default
adapter: mysql2
encoding: utf8
reconnect: false
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000

development:
<<: *default
database: <имя_бд>
username: <имя_юзера_бд>
password: '<пароль_юзера_бд>'

production:
<<: *default
database: <имя_бд>
username: <имя_юзера_бд>
password: '<пароль_юзера_бд>'


Чтоб “прогнать” миграцию используем команду:

rails db:migrate

В случае ошибки неудачную миграцию можно отозвать командой
rake db:rollback STEP=1

Cписок миграций можно вызвать командой
rake db:migrate:status

Убедиться в успехе создания таблицы можно в MySQL Workbench:
Как видно на скриншоте - столбцы созданной таблицы соответствуют файлу миграции, но пока таблица пуста (не создан ни один пользователь)

Генерация “вьюх”

Модель пользователя создана, теперь нужно создать её представление (View). Генерация выполняется командой:

rails g devise:views

Добавим ссылки для входа/регистрации на главную страницу в файл app/views/home/index.html.erb:


<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>

<% if user_signed_in? %>
<span>Здравствуйте, <%= current_user.email %></span>
<%= link_to 'Выйти', destroy_user_session_path, :method => :delete %>
<%= link_to 'Редактировать профиль', edit_user_registration_path %>

<% else %>
<%= link_to 'Войти', new_user_session_path %> или <%= link_to 'Зарегистрироваться', new_user_registration_path %>
<% end %>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>


Запустим сервер:


Готово! Можно создавать/удалять пользователей и редактировать их профили.



Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.