ebook img

Rails 4. Гибкая разработка веб-приложений. PDF

448 Pages·2014·8.191 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Rails 4. Гибкая разработка веб-приложений.

ББК 32.988.02-018 УДК 004.738.5 Р82 Руби С., Томас Д., Хэнссон Д. Р82 Rails 4. Гибкая разработка веб-приложений. — СПб.: Питер, 2014. — 448 с.: ил. — (Серия «Для профессионалов»). ISBN 978-5-496-00898-3 Перед вами новое издание бестселлера «Agile web development with Rails», написанного Сэмом Руби — руководителем Apache Software Foundation и разработчиком формата Atom, Дэйвом Тома- сом — автором книги «Programming Ruby», и Дэвидом Хэнссоном — создателем технологии Rails. Rails представляет собой среду, облегчающую разработку, развертывание и обслуживание веб- приложений. За время, прошедшее с момента ее первого релиза, Rails прошла путь от малоизвест- ной технологии до феномена мирового масштаба и стала именно той средой, которую выбирают, чтобы создавать так называемые «приложения Web 2.0». Эта книга, уже давно ставшая настольной по изучению Ruby on Rails, предназначена для всех про- граммистов, собирающихся создавать и развертывать современные веб-приложения. Из первой части книги вы получите начальное представление о языке Ruby и общие сведения о самой среде Rails. Далее на примере создания интернет-магазина вы изучите концепции, положенные в основу Rails. В третьей части рассматривается вся экосистема Rails: ее функции, возможности и дополнительные модули. Обновленное издание книги описывает работу с Rails поколения 4 и Ruby 1.9 и 2.0. ББК 32.988.02-018 УДК 004.738.5 Права на издание получены по соглашению с Pragmatic Bookshelf. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1937785567 (англ.) © 2011 P ragmatic Bookshelf, LLC. ISBN 978-5-496-00898-3 © Перевод на русский язык ООО Издательство «Питер», 2014 © Издание на русском языке, оформление ООО Издательство «Питер», 2014 Оглавление Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 Rails является средством гибкой разработки . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Для кого предназначена эта книга . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Как нужно читать эту книгу . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Часть I. Начало . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 Глава 1. Установка Rails..........................................20 1 .1 . Установка под Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1 .2 . Установка под Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1 .3 . Установка под Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1 .4 . Выбор версии Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1 .5 . Настройка среды разработки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1 .6 . Rails и базы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Глава 2. Немедленное использование...............................32 2 .1 . Создание нового приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2 .2 . Привет, Rails! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2 .3 . Соединение страниц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Глава 3. Архитектура Rails-приложений ............................47 3 .1 . Модели, представления и контроллеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3 .2 . Поддержка модели Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3 .3 . Action Pack: представление и контроллер . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Глава 4. Введение в Ruby.........................................55 4 .1 . Ruby — объектно-ориентированный язык . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4 .2 . Типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4 .3 . Логика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4 .4 . Организационные структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4 .5 . Маршализированные объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6 Оглавление 4 .6 . А теперь все вместе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4 .7 . Идиомы, используемые в Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Часть II. Создание приложения . . . . . . . . . . . . . . . . . . . . . . . . . .71 Глава 5. Интернет-магазин .......................................72 5 .1 . Поэтапная разработка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5 .2 . Для чего предназначен Depot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5 .3 . А теперь приступим к программированию . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Глава 6. Задача А: создание приложения............................79 6 .1 . Шаг A1: создание приложения по учету товаров . . . . . . . . . . . . . . . . . . . . 79 6 .2 . Шаг А2: улучшение внешнего вида перечня товаров . . . . . . . . . . . . . . . . 87 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Глава 7. Задача Б: проверка приемлемости данных и блочное тестирование........................................95 7 .1 . Шаг Б1: проверка приемлемости данных . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 7 .2 . Шаг Б2: блочное тестирование моделей . . . . . . . . . . . . . . . . . . . . . . . . . . .100 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 Глава 8. Задача В: отображение каталога товаров ...................110 8 .1 . Шаг В1: создание каталога товаров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 8 .2 . Шаг В2: добавление макета страницы . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115 8 .3 . Шаг В3: использование помощника для форматирования цены . . . .119 8 .4 . Шаг В4: функциональное тестирование контроллеров . . . . . . . . . . . . .120 8 .5 . Шаг В5: Кэширование неполных результатов . . . . . . . . . . . . . . . . . . . . . .122 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124 Глава 9. Задача Г: создание корзины покупателя ....................126 9 .1 . Шаг Г1: обнаружение корзины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126 9 .2 . Шаг Г2: связывание товаров с корзинами . . . . . . . . . . . . . . . . . . . . . . . . . .127 9 .3 . Шаг Г3: добавление кнопки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135 Глава 10. Задача Д: усовершенствованная корзина ..................137 10 .1 . Шаг Д1: создание усовершенствованной корзины . . . . . . . . . . . . . . . .137 10 .2 . Шаг Д2: обработка ошибок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 10 .3 . Шаг Д3: завершение разработки корзины . . . . . . . . . . . . . . . . . . . . . . . .147 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150 Глава 11. Задача Е: добавление AJAX..............................152 11 .1 . Шаг Е1: перемещение корзины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153 11 .2 . Шаг Е2: создание корзины на основе AJAX-технологии . . . . . . . . . . .159 Оглавление      7 11 .3 . Шаг Е3: выделение изменений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163 11 .4 . Шаг Е4: предотвращение отображения пустой корзины . . . . . . . . . . .166 11 .5 . Шаг Е5: придание изображениям восприимчивости к щелчкам . . .169 11 .6 . Тестирование изменений, внесенных при добавлении AJAX . . . . . .171 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174 Глава 12. Задача Ж: оформление покупки..........................176 12 .1 . Шаг Ж1: регистрация заказа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176 12 .2 . Шаг Ж2: применение Atom-канала . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193 Глава 13. Задача З: отправка электронной почты ....................194 13 .1 . Шаг З1: отправка подтверждающих электронных сообщений . . . . .194 13 .2 . Шаг 32: комплексное тестирование приложений . . . . . . . . . . . . . . . . . .202 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207 Глава 14. Задача И: вход в административную область ...............208 14 .1 . Шаг И1: добавление пользователей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209 14 .2 . Шаг И2: аутентификация пользователей . . . . . . . . . . . . . . . . . . . . . . . . .214 14 .3 . Шаг И3: ограничение доступа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219 14 .4 . Шаг И4: добавление боковой панели и дополнительных административных функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226 Глава 15. Задача К: локализация..................................228 15 .1 . Шаг К1: выбор региона . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 15 .2 . Шаг К2: перевод каталога товаров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 15 .3 . Шаг К3: перевод оформления заказа . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239 15 .4 . Шаг К4: добавление переключателя локализации . . . . . . . . . . . . . . . . .245 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247 Глава 16. Задача Л: развертывание и эксплуатация ..................249 16 .1 . Шаг Л1: развертывание с использованием Phusion Passenger и MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251 16 .2 . Шаг Л2: удаленное развертывание с помощью Capistrano . . . . . . . . .258 16 .3 . Шаг Л3: проверка работы развернутого приложения . . . . . . . . . . . . . .264 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .267 Глава 17. Ретроспектива Depot ...................................269 17 .1 . Концепции Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269 17 .2 . Документирование проделанной работы . . . . . . . . . . . . . . . . . . . . . . . . .272 8 Оглавление Часть III. Углубленное изучение Rails . . . . . . . . . . . . . . . . . . .275 Глава 18. Ориентация в мире Rails ................................276 18 .1 . Где что размещается . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276 18 .2 . Соглашения об именах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288 Глава 19. Active Record .........................................289 19 .1 . Определение структуры ваших данных . . . . . . . . . . . . . . . . . . . . . . . . . . .289 19 .2 . Определение местоположения записей и прослеживание их связей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294 19 .3 . Создание, чтение, обновление, удаление (CRUD — Create, Read, Update, Delete) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298 19 .4 . Участие в процессе мониторинга . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313 19 .5 . Транзакции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .319 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323 Глава 20. Action Dispatch и Action Controller........................324 20 .1 . Направление запросов контроллерам . . . . . . . . . . . . . . . . . . . . . . . . . . . .325 20 .2 . Обработка запросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .334 20 .3 . Объекты и операции, расширяющие диапазон действия запросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .346 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .355 Глава 21. Action View ...........................................356 21 .1 . Использование шаблонов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .357 21 .2 . Создание форм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358 21 .3 . Обработка форм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .361 21 .4 . Выкладывание файлов для Rails-приложений . . . . . . . . . . . . . . . . . . . . 363 21 .5 . Использование помощников . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .367 21 .6 . Сокращение объемов поддержки приложения с помощью макетов и парциалов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .374 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .382 Глава 22. Миграции.............................................383 22 .1 . Создание и запуск миграций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .384 22 .2 . Внутреннее устройство миграции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .386 22 .3 . Управление таблицами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .391 22 .4 . Расширенное применение миграций . . . . . . . . . . . . . . . . . . . . . . . . . . . . .395 22 .5 . Слабая сторона миграций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .398 22 .6 . Манипуляции со схемой данных вне миграций . . . . . . . . . . . . . . . . . . .399 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400 Оглавление      9 Глава 23. Приложения, не использующие браузер ...................401 23 .1 . Автономное приложение, использующее Active Record . . . . . . . . . . .402 23 .2 . Библиотечная функция, использующая Active Support . . . . . . . . . . .403 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .407 Глава 24. Зависимости Rails......................................408 24 .1 . Генерирование XML с помощью Builder . . . . . . . . . . . . . . . . . . . . . . . . . .409 24 .2 . Генерирование HTML с помощью ERB . . . . . . . . . . . . . . . . . . . . . . . . . .410 24 .3 . Управление зависимостями с помощью Bundler . . . . . . . . . . . . . . . . . .412 24 .4 . Взаимодействие с веб-сервером с помощью Rack . . . . . . . . . . . . . . . . .415 24 .5 . Автоматизация задач с помощью Rake . . . . . . . . . . . . . . . . . . . . . . . . . . .418 24 .6 . Обзор Rails-зависимостей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .423 Глава 25. Дополнительные модули Rails............................424 25 .1 . Обработка кредитных карт с помощью Active Merchant . . . . . . . . . . .424 25 .2 . Украшение нашей разметки с помощью Haml . . . . . . . . . . . . . . . . . . . .426 25 .3 Разбиение на страницы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Наши достижения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .431 25 .4 . Поиск дополнительных модулей на сайте RailsPlugins .org . . . . . . . .432 Глава 26. Куда двигаться дальше..................................434 Алфавитный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .436 Благодарности Rails постоянно развивается, и вместе с ней изменяется и данная книга . Части при- ложения Depot переписывались по нескольку раз, кроме этого обновлялись все комментарии к этому коду . Исключение ряда средств по мере того как они попа- дали в разряд нерекомендуемых, неоднократно приводило к изменению структуры книги, как только горячее становилось еле теплым . Поэтому данная книга не появилась бы на свет без огромной помощи со сторо- ны сообществ Ruby и Rails . Для начала перечислю очень полезных официальных рецензентов проектов данной книги: Джереми Андерсон (Jeremy Anderson), Andrea Barisone (Андреа Барисо- не), Кен Коар (Ken Coar), Джеф Коэн (Jeff Cohen), Джоел Клермонт (Joel Clermont), Джеф Дрейк (Geoff Drake), Jeremy Frens (Джереми Френс), Паван Горакави (Pavan Gorakavi), Майкл Юревич (Michael Jurewitz), Майкл Линд- саар (Mickel Lindsaar), Nigel Lowry (Нигель Лоури), Stephen Orr (Стефен Орр), Aaron Patterson (Аарон Паттерсон), Пол Рейнер (Paul Rayner), Мар- тин Реверс (Martin Reuvers), Даг Ротен (Doug Rhoten), Гари Шерман (Gary Sherman), Tibor Simic (Тибор Симик), Gianluigi Spagnuolo (Джанлуиджи Спаньюоло), Даванум Шринивас (Davanum Srinivas), Charley Stran (Чар- ли Стран), Federico Tomassetti (Федерико Томассетти), Стефан Туралски (Stefan Turalski) и Хосе Валим (José Valim) . Кроме этого, каждое издание данной книги выпускалось в бета-версии: каждая версия публиковалась в PDF-формате, и люди комментировали ее в Интернете . В результате оставленных ими комментариев поступило более 1000 предложений и сообщений об ошибках . Значительная часть предложений в конечном итоге была принята, что сделало эту книгу намного полезнее . Хотя наша благодарность распространяется на всех, кто поддерживал программу выпуска бета-версии книги и внес в своих отзывах так много ценных предложений, среди них есть люди, которые при этом вносили свой вклад не по долгу службы: Мануэль Э . Видаурре Аренас (Manuel E . Vidaurre Arenas), Сет Арнолд (Seth Arnold), Уилл Боулин (Will Bowlin), Энди Брайс (Andy Brice), Джейсон Ка- тена (Jason Catena), Виктор Мариус Костан (Victor Marius Costan), Дэвид Хэдли (David Hadley), Джейсон Холловей (Jason Holloway), Дэвид Капп

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.