Ruby on Rails + gem Device
Введение
Пользовательские библиотеки для Ruby называются гемами (gem). Фреймворк Ruby on Rails представляет собой, по большей части, всего лишь гем Rails, и работает по модели Model-View-Controller.К делу
rvm install 2.4.1
Создадим гемсет - папку с набором скачанных гемов
rvm use ruby-2.4.1@rails5.1.3 --create
rvm use ruby-2.4.1@rails5.1.3
gem install rails --version=5.1.3 --no-rdoc --no-ri
rails -v
rails new portal_systop
rails server
- локальный домен сервера http://localhost:3000
- среда - development - удобна для разработки т.к. в ней отображается много отладочной информации, на рабочем же сервере опасно запускать портал в среде разработки, для этого во фреймворке существует среда production
- сочетание клавиш для остановки сервера Ctrl-C
rails generate controller Home index
Итак, этой командой создались:- контроллер home_controller.rb в директории app/controllers/
- директория “вьюх” app/views/home/ и в ней один файл index.html.erb
- запись в файле routes.rb
rake routes
Контроль версий
Т.к. дальше пойдут серьезные изменения, целесообразно зафиксировать данное состояние проекта, создав коммит (снимок текущей структуры файлов проекта и их содержимого, к которому можно откатиться в любое время) с помощью Git’а (sudo apt install git -y)git init # инициализация репозитория
git add . # добавление всех-всех изменений разом
git commit -m "initial commit" # создание коммита
git add . # добавление всех-всех изменений разом
git commit -m "initial commit" # создание коммита
Гем device
“Прикручивает” систему аутентификации и доступа к порталу. Т.к. devise является гемом, то добавим его в наш гемсет, создав строку в файле Gemfile:bundle install
rails generate devise:install
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
}
rails generate devise User
- создался файл модели в папке app/models/
- добавилась запись ‘devise_for :users’ в файл роутов
- создался файл миграции, описывающий структурные изменения в БД
Здесь описаны названия, типы и параметры столбцов будущей таблицы ‘users’.
Определяемся с БД (база данных)
По умолчанию в Рельсах стоит гем, позволяющий работать только с простенькой БД - sqlite3. Чтоб назначить, например, MySQL надо:- установить БД (MySQL)
- установить гем, управляющий нужной БД (gem 'mysql2', '~> 0.4.8')
- подправить конфиг config/database.yml
adapter: mysql2
encoding: utf8
reconnect: false
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
<<: *default
database: <имя_бд>
username: <имя_юзера_бд>
password: '<пароль_юзера_бд>'
<<: *default
database: <имя_бд>
username: <имя_юзера_бд>
password: '<пароль_юзера_бд>'
rails db:migrate
rake db:rollback STEP=1
rake db:migrate:status
Генерация “вьюх”
Модель пользователя создана, теперь нужно создать её представление (View). Генерация выполняется командой:rails g devise:views
Добавим ссылки для входа/регистрации на главную страницу в файл app/views/home/index.html.erb:
<p>Find me in app/views/home/index.html.erb</p>
<span>Здравствуйте, <%= current_user.email %></span>
<%= link_to 'Выйти', destroy_user_session_path, :method => :delete %>
<%= link_to 'Редактировать профиль', edit_user_registration_path %>
<%= link_to 'Войти', new_user_session_path %> или <%= link_to 'Зарегистрироваться', new_user_registration_path %>
<% end %>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
Запустим сервер: