Ruby on Rails. Установка, настройка, начало работы

от автора

Зачем.

В этой маленькой статье, которую с удовольствием прочитал бы сам неделю назад, я попытался собрать все вещи, которые понадобились бы человеку, задумай он «с нуля» написать приложение на RoR. То есть не углубляясь ни в одну из областей, описать необходимый минимум действий, чтобы установить, настроить и написать своё первое приложение.Здесь собрано, как мне кажется, всё, что нужно и я надеюсь этот текст сэкономит кому-нибудь несколько часов поиска в интернете). Сам изучаю RoR вторую неделю, так что не судите строго).

Установка.

Просто и быстро ror ставится через rvm c rvm.io/.

>\curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled 

Запустить rvm:

>source /Путь_к_домашней_директории*/.rvm/scripts/rvm 

*$HOME в дальнейшем.
После этого в $HOME/.bash_profile должна появиться строчка:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* 

и при каждом открытии консоли rvm будет подгружаться, но у меня этого не случилось — пришлось ещё в $HOME/bashrc прописывать:

. ~/.bash_profile 

Теперь всё точно должно быть хорошо.
Устанавливаем нужную(скорее всего это будет самая последняя) версию руби (сколько их и в чём отличие можно посмотреть сдесь -http://www.ruby-lang.org).

>rvm install 1.9.3 

Проверка на успешность создания

>ruby -v 

должна вернуть более подробную информацию, вроде

ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux]. 

В процессе установки я случайно установил несколько версий, что потом доставило некоторые неприятности). Посмотреть список установленных версий руби можно так:
>rvm list
Если версий несколько, то текущая будет помечена "=>", дефолтная — "*", а текущая и дефолтная — "=*". Поменять на нужную используемую версию можно так:

>rvm use ruby-1.9.2-p320 (любая нужная версия) 

Чтобы поменять дефолтную версию руби пишем:

>rvm use ruby-1.9.2-p320 --default 

Создание проекта.

Теперь можно перейти непосредственно к созданию проекта. Создаём папку $HOME/ROR/tickets, заходим в неё и делаем следующее.

>sudo gem install bundler >rails new tickets 

При создании проекта будут сгенерированы все необходимые директории(app,config,db,log и т.п.) и конфигурационные файлы в указанной папке. Для работы небольшого тестового проекта нам потребуется, в моём случае, база данных PostgreSQL, пара gem-ов(библиотек) и запущенный rails сервер).
Для запуска сервера нужно, находясь в корне папки с созданным проектом запустить команду:

>rails s -p 3000 

где s — команда запуска сервера, а -p 3000 -номер порта, по которому будет доступен проект. Что бы запустить консоль, нужно набрать:

>rails c 

Список всех команд можно посмотреть, набрав
>rails —h. Теперь по адресу localhost:3000 мы увидем стартовую страницу проекта. Так же можно запускать любое количество серверов других проектов на других, не занятых портах. В ходе работы. у меня в один момент по какой-то неведомой мне причине возникла проблема с запуском сервера — выдавалась ошибка, что сервер уже запущен — для её решения нужно просто удалить файл $HOME/ROR/tickets/config/tmp/pids/server.pid и запустить сервер ещё раз.

База данных.

Чтобы работать с постгресом, добавляем в конец файла Gemfile, который должен находится в корне проекта, строчку
>gem ‘pg’
сохраняем файл и делаем

>bundle install 

его мы делаем каждый раз, когда вносим изменения в Gemfile, а потом ещё и перезапускаем сервер. Чтобы сюда больше не возвращаться, сразу же добавляем и
>gem ‘haml-rails’ для быстрой и удобной(после того как привыкнешь)) разметки шаблонов-представлений. Теперь отредактируем атрибуты конекта к постгресу в файле database.yml. Он находится в папке $HOME/ROR/tickets/config/ и должен будет содержать такой блок:

development:   host: localhost   adapter: postgresql   encoding: unicode   database: tickets   pool: 5   username: tickets 

с нужными пользователем и именем БД, у меня это tickets и tickets соответственно).

Вроде бы все приготовления закончены и можно приступать к созданию модели, контроллера и представления.

Модель.

Создаём модель:

>rails g model user 

Название модели пишем в единственном числе — таблица в бд будет во множественном. Эта команда создаст файлы модели и миграции в $HOME/ROR/tickets/app/models/user.rb и $HOME/ROR/tickets/app/db/migrate/20130425081208_create_users.rb. все файлы контроллеров и моделей имеют расширение .rb, представлений — .html.haml(в нашем случае использования haml). Посредством миграции мы будем управлять работой с таблицами в БД через консоль, что весьма удобно(опять таки, когда привыкаешь), так же ониобеспечивают простоту переноса приложения, на другой сервер, например. Добавляем нужные поля:

class CreateUsers < ActiveRecord::Migration   def up     create_table :users do |t|       t.string :name, null: false       t.boolean :role, null: false, default: false       t.datetime :reg_date       t.timestamps     end   end      def down      drop_table :users   end  end 

Создаём два метода — up и down, которые используются по умолчанию функциями работы с миграциями — они, соответственно, создают и удаляют нашу таблицу. Названия типы данных будут зависеть от используемой БД. Первичный ключ создаётся по умолчанию и будет называться id, но его можно задать и явно:

create_table :users, :primary_key => :users_id do |t| 

А если мы не хотим создавать первмчный ключ вообще, пишем так:

create_table :users, :id => false do |t| 

Сохраняем и пишем в консоле:

>rake db:migrate 

В результате действия этой команды выполняются все невыполненные методы up из файлов миграций в директории $HOME/ROR/tickets/app/db/migrate/. Все сведения о состоянии таблиц можно посмотреть в файле $HOME/ROR/tickets/app/db/shema.rb.

>rake db:rollback 

Запускает метод down последней выполненной миграции, в результате чего таблица удаляется из БД. Чтобы откатить больше миграций, нужно добавить к команде rollback параметр STEP:

>rake db:rollback STEP=3 

эта команда откатит три последние миграции. Посмотреть статус всех миграций в консоли:

>rake db:migrate:status 

Если нужно запустить какой-то определённый метод из определённой миграции, то добавляем параметр VERSION:

>rake db:migrate:up VERSION=000001 

В файле модели ($HOME/ROR/tickets/app/models/user.rb) нам пока нужно сделать только одно — определить поля таблицы, которые будут доступны для изменения из контроллера, в целях безопасности, как я понимаю). Для этого пишем в нём следующее:

class User < ActiveRecord::Base     attr_accessible :name, :role  end 

Кстати, синтаксис языка очень чувствителен к табуляциям — их очень хорошо можно отслеживать в редакторе, которым пользуюсь я — sublime_text.

Пока приложение не работает, для того, чтобы удостовериться, что все созданные таблицы действительно созданы и функционируют как им и положено, можно воспользоваться раилс консолью:

>user = User.new(name:"Test",role:"true") 

эта команда не сделает запись в таблицу, но создаст объект руюи в памяти со всеми установленными атрибутами. А теперь сделаем запись:

>user.save 

в случае успеха должна вернуть true. Запись можно создать и рдной командой — create:

>User.create(name:"Test",role:"true") 

Чтобы проверить есть ли объект в БД, можно использовать find:

>User.find(1) 

вернёт объект или ошибку: «ActiveRecord::RecordNotFound: Couldn’t find User with id=1», а так же и сам сгенерированный sql-запрос к БД.
Искать можно и по конкретным полям:

>User.find_by_name("Test") 

Ещё несколько удобных методов, которые наверняка пригодятся на первых порах:
>User.first и User.last -вернут первую и последнюю запись в таблице соответственно, а User.all вернёт массив всех объектов таблицы.

Контроллер.

Создаём контроллер:

>rails g controller users 

В результате этой команды будут созданы файл контроллера: $HOME/ROR/tickets/app/controllers/users_controller.rb и директория для представлений:
$HOME/ROR/tickets/app/views/users/. Каждому методу котроллера будет соответствовать представление с таким же названием, в этой папке. Их можно создавать вручную, а можно и сразу при создании контроллера:

>rails g controller users index,list 

В этом случае файлы представлений создадутся автоматически в папке $HOME/ROR/tickets/app/views/users/ и будут называться (если вы не забыли подключить haml) index.html.haml и list.html.haml. Удалить контроллер можно так:

>rails d controller users 

Определять метод index, который создаётся по умолчанию, не обязательно. Содержимое нашего контроллера users будет таким:

class UsersController < ApplicationController   def list      @users_list=User.all         end  end 

В users_list будет массив объектов пользователей, которых мы по идее уже понадобавляли из консоли, а "@" означает, что переменная будет передана в шаблон.

Представление.

Теперь создаёи представление, я просто создал этот файл руками в нужной директории:
$HOME/ROR/tickets/app/views/users/list.html.haml
Документацию по HAML можно почитать здесь, а пока набо понадобится минимум знаний о нём, например то, что вместо открывающего и закрывающего тега в нём используется "%tag". То есть после рендеринга шаблона, содержащего %html, мы получим страницу с

<html></html> 

. Уровень вложенности задаётся табуляцией, атрибуты тегов пишутся «хешеобразно» в фигурных скобках:

 %td{colspan=>"2"} 

превратится в

<td colspan="2"></td> 

, а содержимое — через пробел: %td test. Таким образом содержимое нашего представления:

%table{:border=>"1"} 	%tr 		%td Логин 		%td Администратор 	- @users_list.each do |users| 		%tr 			%td= users.name 			%td 				%input{:type=>"checkbox",:name=>"role_#{users.id}",:checked=>users.role} 			 				 %br 

Дефис — исполняемый код в шаблоне. Здесь мы проходимся по массиву объектов и выводим в цикле его методы — поля name и role и id.

Все представления «оборачиваются» в главный шаблон, который находится в $HOME/ROR/tickets/app/views/layouts/application.html.haml
Удаляем всё, что в нём есть и делаем его максимально простым:

!!! %html{:lang => "en"} 	%head 		%title Test 	%body 		=yield 

Содержимое всех наших сгенерированных шаблонов подставляется вместо =yield. Главное не ошибится с уровнями вложенности, меня это поначалу очень напрягало).

Маршруты.

И остался только один маленький шаг — редактирование файла-конфига маршрутов(url) — routes.rb. Он находится в $HOME/ROR/tickets/config/. В нём описываются все маршруты нашего проекта. Сейчас там будет только две записи:

Tickets::Application.routes.draw do    root :to => "users#index"     #GET Urls   get "users/list"  end 

Это рутовый путь на «главную» страницу(будет показываться содержимое шаблона /users/index.html.haml, даже несмотря на то, что метод index в контроллере не определён) и путь к странице вывода списка пользователей. В случае, если к методу будет пост запрос, он должен будет прописываться так:
post «users/add».
Теперь всё должно работать)

ссылка на оригинал статьи http://habrahabr.ru/post/180577/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *