Быстрый старт - Rails + SQLite

В данном туториале сделаем простое DB web-приложение, на базе SQLite.

Предполагаем, что Rails уже установлен (также средой является win32).

Устанавливаем SQLite

Я использую SQLite версии 3.

SQLite это "легкая" реализация SQL базы данных, она работает с файлом напрямую.

Для работы с SQLite необходимы 2 файла: sqlite3.exe - для управления файлом (создание/удаление таблиц и т.д.), и сам "движок" для работы с API - sqlite3.dll.

Скачиваем файлы отсюда:

* sqlite-3_2_7.zip
* sqlitedll-3_2_7.zip
Разархивируем, и размещаем файлы в "видимых" папках, например, я записал эти (sqlite3.dll, sqlite3.exe) файлы в C:rubybin папку.

Установка Ruby адаптера для работы с SQLite

Для работы с SQLite из Ruby необходим соотв. интерфейс, его можно взять тут (A Ruby interface for the SQLite database engine). Из списка файлов, выбираем sqlite3-ruby-1.1.0-mswin32.gem, скачивем его, и далее находясь в папке, где лежит скаченный файл sqlite3-ruby-1.1.0-mswin32.gem, набираем

gem install sqlite3

он должен найти локальный файл, и установить Ruby адаптер для SQLite версии 3. В более простом варианте (если машина подключена к интернет, и нет проблем с прокси), можно просто набрать

gem install sqlite3

и gem сам все скачает и установит.

Создание Rails приложения

Генерируем приложение

В папке, где хранятся наши rails приложения (например, C:rails), набираем в командной строке:

rails test

создастся папка test и в ней сгенерируется структура папок для rails приложения.

Настраиваем и создаем БД

Заходим в папку test/config, находим файл database.yml - в нем хранится информаци об адаптере БД который используется, и соотв. настройки.

Видим, настройки для режима development:

development:
adapter: mysql
database: test_development
socket: /path/to/your/mysql.sock
username: root

Меняем адаптер на SQLite - т.к. версия 3я, то адаптер называется sqlite3, далее для этого адаптера один параметр - dbfile - путь к файлу. Наш файл будет лежать в папке db/ (относительно корня нашего Rails приложения test/), и называться test.db (мы создадим его немного позже).

Получается database.yml файл:

development:
adapter: sqlite3
dbfile: db/test.db

Надо создать файл БД для SQLite. Для этого заходим в папку test/db/. Создаем файл db.sql - в нем будем хранить sql для создания нашей БД, пусть это будет простая таблица для хранения статей - ид, заголовок, текст (файл db.sql):

drop table articles;
create table articles(
id integer primary key,
title varchar(255),
text varchar(1024)
);

Теперь запускаем:

sqlite3 -help

видим ключик -init filename read/process named file, и соотв. получается запрос, где последним указан файл:

C:railstestdb>sqlite3 -init db.sql test.db

таблица должна быть добавлена (можно сделать bat файл, который будет делать это обновление), проверяем внутри sqlite>, набираем .tables. - видим нашу таблицу.

выходим из sqlite> - .q

Замечаем, что появился файли test.db, размером 2048 байт. Все, таблица есть, теперь надо сделать модель и контроллер в Rails для работы с ней.

Создаем модель/контроллер

Модель - находясь в папке test набираем:

ruby script/generate model Article

(заметим, что мы просто запускаем Ruby скрипт generate, с параметрами), результатом будет модель-класс, который работает с таблицей articles.

Контроллер - находясь в папке test набираем:

ruby script/generate controller Article

создается класс-контроллер, который, судя по своему названию, будет "откликаться" на URL запросы, вида 'http://localhost:3000/article' (когда будет запущен веб-сервер).

Теперь надо связать контроллер с моделью, для этого заходим в папку testappcontrollers, находим файл article_controller.rb (это контроллер, который мы недавно сгенерировали), открываем:

class ArticleController < ApplicationController
end

видим класс ArticleController, который пронаследован от ApplicationController. Добавляем scaffold (это команда для автоматической работы с базовыми операциями над БД - список, добавление, изменение, удаление, просмотр), файл article_controller.rb:

class ArticleController < ApplicationController
scaffold :article
end

Запускаем веб сервер

Находясь в папке test, набираем:

ruby script/server

- запускается WEBRick веб-сервер, по умолчанию с utf8 кодировкой, и на 3000 порту (параметры запуска можно увидеть по команде ruby script/server -help)

Смотрим результат

Запускаем Firefox, набираем в строке url:

http://localhost:3000/article

Где:

* 3000 - это порт, на котором запустился веб-сервер WEBRick
* article - это контроллер, который мы запрашиваем.

И видим интерфейс для работы с таблице articles (по умолчанию):

* просмотр списка
* добавление новой записи
* просмотр/изменение/удаление записи

Чтобы увидеть все эти операции в коде, есть следующий генератор:

ruby script/generate scaffold Article Article

(надо запустить его находясь в папке test), и нажать "y", на подтверждение перезаписи файлов. В данном примере, первый параметр - название модели, второй параметр - название контроллера.

После данной генерации контроллер test/app/controllers/article_controller.rb, "обрастет" соответсвующими методами для работы с таблицей. Также в папке testappviewsarticle будут созданы rhtml шаблоны, которые используется при работе.

Меняем урл по умолчанию

Единственное неудобство, это то, что надо прописывать /article при первоначальном запросе. Это решается редактированием testconfigroutes.rb файла.

Надо удалить файл public/index.html, и добавить строку:

map.connect '', :controller => "article"

в routes.rb файл.

Теперь по URL'у http://localhost:3000/ открывается контроллер article.