Приложение управления заявками сервиса техобслуживания.
После клонирования репозитория следует:
-
создать файл config/database.yml и добавить в него следующее содержание:
development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000 -
выполнить команду
bundle install -
выполнить команду
bundle exec rake db:create db:migrate db:seed -
запустить сервер командой
bundle exec rails s -
зайти в браузере на адрес http://localhost:3000
-
по завершению работы нужно погасить сервер - зайти в терминал, где выполнялась команда запуска сервера и остановить его сочетанием клавиш 'Ctrl + C'.
Пункты с 4 по 6 повторяются при каждой сессии работы с приложением.
В последствии можно сбросить все данные из БД на данные по умолчанию (пользователь admin с паролем master и список рабочих) с помощью команды bundle exec rake db:drop db:create db:migrate db:seed. Так же эту команду стоит выполнять каждый раз, когда меняются миграции.
Последний раз миграции менялись 9 октября 2013, 6:29.
Для системы оповещения используется email от Яндекса. awp-application@yandex.ru : Hfy6834fYfjJ
Для оповещения с помощью sms используем сервис http://www.sms4b.ru/: логин: awp_SMS_sender , пароль: Gr0moZEKa
Используемыев создании приложения технологии:
- Ruby v1.9.3
- Ruby on Rails v3.2.14
- Bundler v1.3.5
- Devise v3.1.1
- Sqlite3
- Jquery v2.0.3
В основе развертки Rails 3 приложения лежит Bundler - система автоматизированной установки и поддержки версий гемов Ruby. В Ruby гемами являются в библиотеки или приложения, вынесенные в отдельные сущности. Например, Rails сам по себе является гемом Ruby, который использует многие другие гемы для работы.
Список гемов приложения указывается в файле 'Gemfile'. Для нашего приложения используется, естественно, гем 'rails', а так же вспомогательные гемы, например:
- gem 'sqlite3' - гем для работы с Sqlite базой данных
- gem 'russian' - гем для локализации разных данных, например привычного для русского пользователя отображения даты
- gem 'devise' - гем, предоставляющий систему авторизации
Установка всех указаных в файле 'Gemfile' гемов происходит с помощью команжы bundle install.
Rails позволяет работать с довольно обширным списком баз данных. Для приложения мы используем базу данных Sqlite3 - она очень проста в развертке, не требует дополнительных запущенных демонов / сервисов и идеальна для небольших проектов.
Настройки подключения к базе данных указываются в файле 'config/database.yml'. Там указывается имя гема, используемого для подключения к БД и параметры подключения. Для Sqlite3 базы данных основным параметров подключения является путь к файлу базы данных. А нашем случае мы используем относительный путь от корня приложения. Создание базы данных производится командой bundle exec rake db:create.
Структура таблиц базы данных описывается в миграциях, файлы которых расположены в папке 'db/migrate'. Файлы миграций содержат команды к созданию, удалению, изменению структуры таблиц БД, а так же позволяет создать основные записи таблиц, такие как, например, запись о первом пользователе-администраторе системы. Запуск миграций происходит с помощью команды bundle exec rake db:migrate.
Немаловажно упомянуть файл 'db/seeds.rb' - он содержит код создания демо-данных, либо первоначальных данных приложения. В нашем приложении мы используем его, например, для создания списка работников. Запуск инструкций seeds.rb файла происходит командой bundle exec rake db:seeds.
Конфигурационные файлы приложения и его компонентов находятся в папке config. Основным файлом конфигурации является 'config/application.rb' - в нем устанавливаются такие важные параметры как язык приложения, часовой пояс и другие.
Так же важным файлом конфигурции является файл 'config/routes.rb' - в нём указываются все пути web-приложения - отношения урлов, на которые должно реагировать приложение, и контроллеров, которые должны обрабатывать запросы, пришедшие на эти урлы (о контроллерах позже).
Остальные файлы конфигураций оставлены по умочанию.
Папка 'public' является корнем сайта и все файлы в этой папке будут доступны по прямым урлам. Это, например 'robots.txt', 'favicon.ico' и другие статичные файлы. Так же в этой папке хранятся статические html странички ошибок, так как они будут доступны даже в случае, когда Rails приложение не может запуститься из-за ошибки.
Моделями являются классы, которые описывают основные объекты приложения, данные которых, в большинстве случаев, хранятся в базе данных. К таким можно отнести пользователей системы, работников, заявки. Файлы моделей хранятся в папке 'app/models'. Благодаря моделям мы можем настраивать правила записи данных и организовывать удобный доступ к данным.
Классы, которые отвечают за обработку запросов к приложению и формирования ответа на них. Файлы контроллеров хранятся в папке 'app/controllers/'. Контроллеры определяют, какие данные будут подготовлены для запроса, соберут их, обращаясь к моделям и передадут представлениям для отображения.
Представлениями являются файлы, которые описывают выходной html, со ставками Ruby кода. В данном приложении используем erb технологию шаблонизации. Файлы представлений хранятся в папке 'app/views'. Структура вложенных папок соответствует названиям контроллеров, которые вызывают представления. Например, контроллер 'requests_controller' работает со страницами списка заявок, истории заявок, а так же страницы печали заявок, а представления для этих страниц находятся в файлах: 'app/views/requests/index.html.erb', 'app/views/requests/history.html.erb', 'app/views/requests/print.html.erb'.
Для запуска Rails приложения требуется web-сервер, который будет принимать http запросы, передавать их приложению и отдавать пользователю ответ для отображения в его браузере. Мы используем встроенный в Ruby on Rails 3 web-сервер Webrick. Запускается он командой bundle exec rails server. Останавливается простым прерыванием работы приложения - командой kill или просто комбинацией клавиш 'Ctrl + C' в консоли, где запущен этот сервер.
Для редактирования фронтэнда я укажу расположение js, css, image файлов, а так же представлений - html страниц со вставками ruby кода.
Все js файлы хранятся в двух местах:
- vendor/assets/javascripts - библиотеки и плагины
- app/assets/javascripts - js код, написанный для проекта
При редактировании названия любого js файла, или добавлении нового в любую из папок, нужно зайти в файл app/assets/javascripts/application.js и или добавить строчку типа //= require jquery.popapilus с названием добавленного файла или найти строку с названием измененного файла и поправить её.
Все css файлы хранятся в двух местах:
- vendor/assets/stylesheets - библиотеки
- app/assets/stylesheets - стили, написанные для проекта
При редактировании названия любого css файла, или добавлении нового в любую из папок, нужно зайти в файл app/assets/stylesheets/application.css и или добавить строчку типа *= require popapilus с названием добавленного файла или найти строку с названием измененного файла и поправить её.
Все изображения в app/assets/images. Никаких лишних действий не нужно - добавил и они уже в проекте.
Обращаться к любому css, js файлу или файлу изображения можно и из статических html файлов, таки, например, как public/ex_index.html. После запуска приложения все css, js и файлы изображений какбэ переносятся в виртуальную папку /assets. Так что можно обратиться за файлом main.js по ссылке '/assets/main.js'. Так же в файле стилей когда подключаешь изображение через url() нужно обращаться не к '../images/file.png', а просто к 'file.png' - виртуально они в одной папаке.
Все представления хранятся в app/views. Внутри представлений в тэге <% ... %> размещается Ruby код - трогать его не рекомендуется.
- views/layouts/application.html.erb - обертка (head + header)
- views/requests/index.html.erb - главная
- views/requests/history.html.erb - страница истории заявок
- views/requests/print.html.erb - печать заявок
- views/requests/_workers_list.html.erb - фрагмент кода для списка работников (вставляется в index.html.erb с помощью команды
render partial: "workers_list". - views/cabinet/edit.html.erb - настройки пользователя (личный кабинет)
- views/devise/sessions/new.html.erb - окно логина в систему
GET /requests/{ID заявки}.json
Получение данных о заявке. Пример возвращаемого значения:
{
"id":1,
"user":"admin",
"client_id": 4,
"day":"2013-10-07",
"time":"с 10 до 14",
"body":"Переобжать линк и свести с ума всех прохожих",
"address":"ул.Менжинского д.10 кв.195",
"workers":[["Толик",1],["Ванька",2]]
}
Если заявки с таким ID надено не будет - вернется 404 ошибка.
ID заявки можно взять из аттрибута data-request-id тэга tr строки таблицы с данными об этой заявке.
POST /requests.json
Создание нового запроса. Пример принимаемых данных:
"request":{
"client_id":4,
"day":"2013-10-07",
"time":"с 10 до 14",
"body":"Переобжать линк и свести с ума всех прохожих",
"worker_ids":[1,2]
}
Пример возвращаемого значения в случае успеха:
{ id: 5 }
В случае ошибки вернется страница с кодом ошибки 422 и данными вроде:
{
"user":["не может быть пустым"],
"day":["не может быть пустым"]
}
PUT /requests/{ID заявки}.json
Обновление данных о заявке. Пример принимаемых данных:
"request":{
"client_id":4,
"day":"2013-10-07",
"time":"с 10 до 14",
"body":"Переобжать линк и свести с ума всех прохожих",
"worker_ids":[1,2]
}
Любой из параметров можно просто пропустить, если его не нужно обновлять. Для отправки запроса метода put достаточно просто передать jquery ajax в опции параметр method: "put".
Возвращает ничего (точнее код 200) в случае успеха и ошибку с кодом 422, когда что-то пошло нет так, и данными вроде:
{
"user":["не может быть пустым"],
"day":["не может быть пустым"]
}
DELETE /requests/{ID заявки}.json
Удаление заявки. Восстановлению не подлежит. Для отправки запроса метода delete достаточно просто передать jquery ajax в опции параметр method: "delete". Возвращает ничего (точнее код 200).
PUT /requests/{ID заявки}/complete.json
Закрытие заявки. Пример принимаемых данных:
"request":{
"close_reason":"Всё починили"
}
Возвращает ничего (точнее код 200).