Если вы слышали о Rails, но еще не сделали решающий шаг, то никогда не было лучшего времени для погружения. Rails 3, самый последний основной выпуск, не только знаменует собой значительную веху в зрелости для самой платформы, но и является также признак зрелого сообщества.
Сегодня я собираюсь показать вам быстрый пример создания простого приложения на Rails 3, чтобы дать вам представление о том, на что похожа работа с Rails. В этом уроке, состоящем из двух частей, мы будем создавать приложение на основе базы данных: сокращение URL-адреса с именем «Shorty».
В первой части вы узнаете, как установить Ruby on Rails, сгенерировать приложение и создать модель. Во второй части мы перейдем к созданию контроллера, написанию представления, а затем завершим все это.
Я собираюсь пролистать много материала, но там будут ссылки на более подробные объяснения, а в конце второй части — места, где вы сможете продолжить после прочтения этого урока.
Вещи, которые вы хотите знать
Для начала важно понять, что Rails построен на архитектуре MVC; то есть модель-представление-контроллер.
Модели отвечают за хранение данных и бизнес-логику. Представления отвечают за уровень, с которым имеет дело пользователь. Контроллеры действуют как мост между моделями и представлениями. Другими словами, Views генерирует ваш HTML, Модели обрабатывают ваши взаимодействия с базой данных (и любую логику, основанную на этих данных), в то время как Контроллеры связывают их вместе, и вы размещаете логику, которая контролирует, где перенаправлен браузер и что может делать пользователь ,
Контроллеры состоят из действий . Думайте о Движении как об отдельном наборе функций: когда вы запускаете приложение, Rails разрабатывает Действие для использования на основе вашего запроса. Именно эта архитектура помогает писать чистый, хорошо структурированный код, с которым приятно работать.
В Rails также есть несколько других терминов, о которых вам полезно знать.
Маршрутизатор, по сути, отображает URL-адрес для конкретного действия на конкретном контроллере с условиями для запросов. Например, Rails знает, что когда вы получаете GET / urls, он должен вызывать действие Index для класса Controller URL-адреса.
Далее, в Rails есть Миграции — по сути, версионная схема базы данных — и набор инструментов, упрощающих работу с Миграциями. Это мощные инструменты, которые позволяют писать код, который настраивает базу данных, без необходимости вручную иметь дело с SQL (и, что более важно, упростить написание кода, который можно многократно использовать для нескольких механизмов баз данных).
Наконец, Rails использует концепцию сред. Ваше Rails-приложение может быть запущено в среде разработки (для работы с кодом), тестирования (для выполнения автоматических тестов) и производства (для развертывания приложений). Вы также можете создавать другие пользовательские среды и настраивать свое приложение и базу данных на основе этих сред.
Установка Ruby на Rails
Первая задача, которую нам нужно сделать, — установить на свой компьютер относительно свежую версию Ruby (1.8.7 или выше). Следует отметить, что Rails использует набор инструментов, очень загруженный из командной строки. Если вам неудобно работать в командной строке в Windows или в терминале в OSX или в вашем предпочтительном дистрибутиве Linux, вы можете захотеть немного почитать в другом месте заранее, чтобы получить базовые знания. Если это так, то руководства для Windows и OSX / Linux — хорошее место для начала.
Установка Ruby и Rails в Windows
В Windows проще всего использовать Rails Installer , единый установщик, разработанный Wayne Seguin, который предоставит вам все, что вам нужно. Просто перейдите по ссылке выше и посмотрите видео про Уэйна, и Ruby на вашем компьютере должен быть установлен в кратчайшие сроки.
Установка Ruby и Rails на Mac или Linux
При установке на Linux или Mac вы можете использовать свой дистрибутив по своему выбору: Ruby или, как предпочитают большинство разработчиков Ruby , Ruby Version Manager , также написанный Wayne Seguin. Поскольку оба варианта могут изменяться и относительно специфичны для дистрибутивов, я предлагаю поискать руководства по вашей работе и чтению через сайт RVM.
Другой более поздний вариант, снова предоставленный Уэйном Сегином, — это скрипт bootstrap_rails_environment
. Он устанавливает RVM и все зависимости, чтобы Rails работал для пользователей в OSX или Linux.
Для начала вам необходимо загрузить файл по адресу https://github.com/wayneeseguin/rvm/raw/master/contrib/bootstrap_Rails_environment
в легко запоминающееся место на вашем компьютере. По умолчанию этот скрипт установит Rails 3.0.3, Ruby 1.8.7 и создаст для вас каталог в ~/Sites
. Если вы хотите изменить эти значения, откройте их в своем текстовом редакторе и измените строки, начиная с rails_version
, ruby_version
и sites_path
как вы считаете нужным.
После того, как вы загрузили и отредактировали файл, откройте ваш терминал, перейдите в каталог, в котором вы установили файл, и запустите:
chmod +x bootstrap_rails_environment ./bootstrap_rails_environment
Это сначала сделает скрипт исполняемым, а затем выполнит его. Если возникнут какие-либо проблемы, он сообщит вам и расскажет, как их решить.
Генерация вашего первого Rails-приложения
Теперь, когда у вас установлен Rails, вам нужно создать базовое приложение. Ruby on Rails использует генерацию кода для нескольких задач, чаще всего для создания нового приложения Rails, а также для настройки контроллера и моделей.
Во-первых, откройте свой терминал или командную строку — теперь вам это понадобится очень сильно. Если вы использовали Rails Installer в Windows, убедитесь, что вы используете опцию «Командная строка с Ruby и Rails» в меню «Пуск», чтобы открыть ее. Вы захотите оставить это открытым, пока мы прорабатываем каждый шаг, так как я буду ссылаться на него довольно часто.
Теперь перейдите в каталог, где вы хотите хранить свой код. Если вы использовали скрипт начальной загрузки Rails, то где бы вы ни sites_path
для sites_path
(по умолчанию ~/Sites
), скорее всего, будет то, что вы хотите; в Windows вы захотите выбрать место (например, c:rails-projects
), которое легко запомнить и на которое можно перейти.
Попав в каталог, используйте команду rails new
для генерации нового приложения Rails. Поскольку наше приложение называется «Shorty», чтобы сгенерировать проект Shorty и перейти в него, мы запустим в нашей командной строке следующее:
rails new shorty cd shorty
Вы также захотите открыть свой редактор в каталоге кода. Если у вас нет любимого редактора или ваш редактор не полностью поддерживает Ruby, я могу порекомендовать E Text Editor в Windows, TextMate в OSX или Komodo Edit в Linux.
В командной строке снова запустите bundle install
. Это говорит bundler, библиотеке, используемой Rails, для выборки и установки всех необходимых библиотек. Пока он работает, воспользуйтесь возможностью просмотреть созданное приложение Rails.
При просмотре структуры кода вы можете заметить, что одно из основных значений Rails — соглашение о конфигурации — приводит к структурированной структуре каталогов для вашего кода. Весь код, связанный с config
, config
каталог config
, код, относящийся к app
, попадает в каталог app
и так далее. Для получения более подробной информации о структуре смотрите пункт 3.2 официального руководства по началу работы с Rails .
Один из файлов, созданных нашим Rails-приложением, config/database.yml
, содержит подробные сведения о подключении к базе данных. Из коробки он использует sqlite3, так как его легко начать. Чтобы создать файл базы данных sqlite3 (и запустить сборку на веб-сервере Rails), вернитесь в командную строку и выполните:
rake db:create rails server
Первая строка вызывает задачу «db: create» в rake, инструмент (например, ant, nant или make на других языках), который позволяет вам запускать небольшие кусочки сохраненного кода. В этом случае задача «db: create» создаст нашу базу данных (если вы посмотрите в файл config/database.yml
, вы увидите, что он создаст файл в db/development.sqlite3
).
Затем вторая строка запускает встроенный веб-сервер, который поставляется вместе с Rails, и запускает его на порту 3000. В командной строке вы должны увидеть нечто похожее на:
=> Booting WEBrick => Rails 3.0.3 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server
Теперь, если вы откроете свой браузер и укажете на http://localhost:3000/
, вы должны увидеть страницу приветствия, подобную этой:
Нажав на ссылку «О среде вашего приложения», вы также увидите список номеров версий для различных библиотек, на которых построен Rails.
Создание вашей первой модели
Теперь, когда у нас есть пустое приложение на Rails, мы можем начать разработку Shorty.
Так как мы создаем сокращение URL, нам нужен какой-то способ хранения записи URL. Для этого мы сгенерируем модель URL с одним указанным полем: url.
Для начала мы будем использовать генераторы Rails для генерации класса и миграции для нас, выполнив в командной строке один раз:
rails generate model Url url:string
Это говорит Rails создать класс URL для Модели, создать миграцию, которая сформирует таблицу URL с одним указанным разработчиком полем, URL и соответствующими тестовыми файлами.
В этом уроке мы не будем рассматривать тестирование, так как это очень глубокая тема. Достаточно сказать, что в реальных приложениях тестирование является очень хорошей идеей, и Rails делает разработку через тестирование максимально простой. Для получения более подробной информации о тестировании смотрите раздел « Модульное тестирование ваших моделей» в официальных руководствах по Rails.
Затем вы захотите использовать свой текстовый редактор, чтобы открыть файл app/models/urls.rb
, содержащий вашу модель URL-адреса и сгенерированный файл миграции (в папке db/migrate
он будет автоматически назван с отметкой времени и _create_urls.rb
; например, db/migrate/20110129184226_create_urls.rb
).
Миграция должна выглядеть примерно так:
class CreateUrls < ActiveRecord::Migration def self.up create_table :urls do |t| t.string :url t.timestamps end end def self.down drop_table :urls end end
И ваша модель должна выглядеть так:
class Url < ActiveRecord::Base end
Редактирование вашей миграции
Миграция сообщает Rails, что, когда она применяется, она должна создать таблицу Urls с полем URL (типа string, обычно переводимого в VARCHAR в большинстве баз данных) и с двумя полями меток времени — created_at
и updated_at
которые Rails автоматически устанавливает для Вы, как вы создаете и обновляете модели. Аналогично, когда он откатывается, ваша Миграция говорит Rails удалить таблицу Urls.
Единственный аспект, который мы хотим изменить в этой миграции, — это запретить базе данных пустые поля URL. В текстовом редакторе перейдите в файл миграции и измените:
t.string :url
в
t.string :url, :null => false
Сохраните файл. Теперь, чтобы применить миграцию к базе данных, вам просто нужно переключиться обратно на консоль и запустить:
rake db:migrate
Rails достаточно умен, чтобы знать, что вам нужно запустить миграцию только один раз. Если вы выполните одну и ту же команду дважды, она не будет пытаться создать таблицу дважды, следовательно, термин версии базы данных, который я использовал ранее.
Редактирование модели
Далее мы захотим отредактировать нашу Модель, чтобы сообщить Rails, что при создании или обновлении URL-адреса всегда должен быть указан URL-адрес. В терминологии Rails мы используем валидации; в частности, мы проверяем наличие поля URL. Для этого мы просто отредактируем наш файл Model (как упоминалось выше), чтобы он выглядел следующим образом:
class Url < ActiveRecord::Base validates :url, :presence => true end
Не забудьте сохранить файл. Для получения дополнительной информации о валидаторах (и ActiveRecord в целом) хорошим справочником, как обычно, являются официальные руководства по Rails .
Чтобы проверить это, мы собираемся представить еще один инструмент: консоль Rails. Построенный на IRb (интерактивный Ruby) это то, что называется REPL: цикл чтения-оценки-печати. По сути, это похоже на терминальную сессию специально для тестирования кода Ruby. В нем мы можем ввести код (чтение), и он запустит его (eval), выдав возвращаемое значение (печать).
В командной строке просто введите Rails console
в своем терминале; это откроет консоль Rails, используя среду разработки. В качестве простого примера, если вы puts Rails.env
в puts Rails.env
, консоль должна распечатать «development», сообщая вам, что консоль работает в вашей среде разработки, как и ожидалось.
Чтобы проверить вашу модель, мы сначала инициализируем новый экземпляр URL, набрав:
u = Url.new
Это должно показать:
#<Url id: nil, url: nil, created_at: nil, updated_at: nil>
Затем попробуйте сохранить его в базе данных, выполнив:
u.save
Так как это неверно, консоль выведет false. Это означает, что вызов сохранения не удался, и наш объект не был сохранен в базе данных, поскольку он был недействительным. Чтобы это исправить, у нас есть два варианта. Во-первых, мы можем создать новый URL, передав опцию:
u = Url.new(:url => "http://google.com/")
Или, проще, мы можем установить атрибут URL для существующего URL:
u.url = "http://google.com/"
Теперь снова запустите u.save
и на этот раз он вернет true, сообщая нам, что он был успешно сохранен в базе данных.
Если мы введем pu
(метод p
просто выведет представление объекта, заданного в качестве аргумента u
), мы должны увидеть:
#<Url id: 1, url: "http://google.com/", created_at: "2011-01-29 19:07:34", updated_at: "2011-01-29 19:07:34">
Как упоминалось ранее, ему автоматически присваивался идентификатор, а также в полях created_at
и updated_at
правильное значение: время его создания.
Чтобы проверить поиск записи в базе данных, закройте консоль (нажмите Ctrl-C или введите exit), затем снова откройте консоль, набрав Rails console и запустите:
u = Url.find 1
Это должно вернуть URL-адрес, который мы вставили ранее, выбрав его из базы данных, используя наш идентификатор. В том же духе, если мы сейчас попробуем:
u = Url.find 100000
Там, где нет URL с идентификатором 100000, Rails ActiveRecord::RecordNotFound
исключение ActiveRecord::RecordNotFound
в Rails, сообщая нам, что он не может найти URL с идентификатором 100000.
Итак, теперь вы установили Ruby, сгенерировали ваше первое приложение и создали вашу первую модель. Во второй части этого руководства вы создадите свой первый контроллер, напишите представление для своего приложения и получите все это работающим.
Перейти к части 2
?