Rails Gem Dependencies, продолжение
В прошлый раз мы остановились на геме TZInfo, и мы начнем с ERubis в этой статье.
Erubis
Erubis — это реализация eRuby, который является выражением Ruby между в представлениях Ruby.
ActionPack
ActionPack - это большая сделка. Rubydoc для ActionPack заявляет, что «предоставляет уровни представления и контроллера в парадигме MVC». Можно утверждать, что это две трети Rails. Он включает ActionDispatch (качество маршрутизации и HTTP, например, кеширование, сеансы и файлы cookie), ActionController (предоставляет базовый класс для контроллеров Rails). ActionView (обрабатывает представления и рендеринг форматов, таких как каналы HTML или ATOM).
Если вы хотите по-настоящему узнать о Rails, глубокое погружение в ActionPack унесет вас далеко.
Арел
Arel - это то, что дает ActiveRecord (эффективный Rails 3) свой классный синтаксис. Это «SQL AST manager», где «AST» означает «Абстрактное синтаксическое дерево». AST - это одна из тех концепций супер-ботаников, которая отделяет гениев от остальных. Объяснение AST выходит за рамки этой статьи (не говоря уже о том, что у меня в голове).
ActiveRecord
ActiveRecord - это объектно-реляционный картограф по умолчанию (ORM), используемый Rails. По сути, он отображает вашу модель на структуру базы данных. Вы можете использовать другие ORM, такие как DataMapper, если хотите.
ActiveResource
ActiveResource - это жемчужина, которая дает Rails приятный интерфейс RESTful , который (по мнению автора), возможно, является лучшей особенностью Rails. Понимание REST является ключом к тому, чтобы стать хорошим веб-разработчиком. Отличное место для начала изучения REST - в книге О'Рейли, RESTful Web Services .
MIME Типы
Гем MIME Types используется Rails для определения MIME-типа запроса, такого как отображение text/html
в HTML и т. Д.
полиглот
Polyglot регистрирует расширения файлов, которые будут использоваться с операторами Ruby require . Итак, если вы хотите загрузить файлы с расширением .funk, расширение .funk можно зарегистрировать в Polyglot. Затем, require 'wegotthe'
, require 'wegotthe'
нашел файл с именем «wegotthe.funk».
верхушка дерева
Treetop - это еще одна жемчужина, которая обрабатывает концепцию уровня гуру, позволяя разработчику легко создавать синтаксис и анализировать «грамматики выражений». Treetop используется, в основном, для добавления синтаксиса к языку (я бы объяснил больше, но этот пост взорвется).
Эти драгоценные камни фокусируются (как вы уже догадались) на отправке почты из Rails. Почта управляет генерацией, отправкой, анализом электронной почты, в то время как ActionMailer создает «почтовые программы» (например: контроллеры для электронной почты) и представления для почтовых шаблонов.
Тор
Тор помогает создавать инструменты и утилиты командной строки. Он часто рассматривается как конкурент Rake, стандартного инструмента Ruby make, и имеет довольно много последователей. Тор является одним из тех драгоценных камней, которые вы бы хорошо сделали для исследования и включения в свой арсенал Рубина (от Бороды Одина!).
Стойка SSL
Rack SSL gem предоставляет промежуточное программное обеспечение для поддержки безопасности транспортного уровня (TLS), наиболее распространенным является протокол SSL. Вот хорошая статья о его использовании.
RDoc
RDoc упрощает создание документации на основе HTML и используется для документирования самого Rails.
Railties
Railties, начиная с версии 3.0, был включен в ядро Rails. Railties - это (возможно) способ расширения Rails, и многие основные компоненты, такие как ActionMailer, ActionController и ActionView, являются Railties. Понимание того, как работает Railties, является еще одной ключевой задачей для начинающего разработчика Rails. Вот хорошая статья, чтобы подогреть аппетит.
Bundler
Bundler - это способ, которым Rails управляет своими гем-зависимостями. Bundler использует Gemfile в корне приложения Rails, чтобы обеспечить доступность всех необходимых гемов и выявление любых конфликтов. Потратьте некоторое время на сайте Bundler, чтобы увидеть, сколько вариантов загрузки гемов доступно.
Рельсы
В моей предыдущей статье я упоминал, что гем Rails включает только исполняемый файл Rails , что немного вводит в заблуждение. Если вы изучите источник на Github, вы увидите, что он включает в себя множество драгоценных камней, обсуждаемых в этих двух статьях. Вы можете начать просмотр кода здесь.
Теперь мы рассмотрели гемные зависимости в Rails 3.1. Несмотря на то, что Rails имеет репутацию простого веб-фреймворка, для создания этой простоты предстоит проделать большую работу.
Генерация приложений Rails
Наконец-то пришло время создать наше приложение на Rails. Как и следовало ожидать, я рассмотрю все доступные варианты перед созданием приложения, так что приготовьтесь к еще одному глубокому погружению. Давайте начнем с того, что снова посмотрим на исполняемый файл Rails, частную часть гема Rails. [В сторону: мне нравится использовать камень open_gem, чтобы быстро открыть конкретный камень в моем редакторе (vim). Как только open_gem установлен, вы просто набираете «gem open», и командная строка и ваш редактор открываются в каталоге gem.] В каталоге rails gem есть только подкаталог bin с исполняемым файлом rails . Источник этого исполняемого файла тревожно лаконичен:
#!/usr/bin/env ruby if File.exists?(File.join(File.expand_path('../..', __FILE__), '.git')) railties_path = File.expand_path('../../railties/lib', __FILE__) $:.unshift(railties_path) end require "rails/cli"
Короче говоря, выполняется проверка, чтобы увидеть, работает ли текущая среда из локального источника (имеется в виду Git-репозиторий), и в результате путь к гему railties смещается. После этого требуется файл cli . Этот файл находится в геме railties и в основном проверяет, находимся ли мы в каталоге приложений Rails или нет. Если мы находимся в приложении Rails, то исполняемый файл rails действует как скрипт, в противном случае мы генерируем новое приложение или плагин.
Сейчас мы хотим сосредоточиться на создании приложения, которое обрабатывается rails / commands / application.rb в геме railties.
require 'rails/version' if ['--version', '-v'].include?(ARGV.first) puts "Rails #{Rails::VERSION::STRING}" exit(0) end if ARGV.first != "new" ARGV[0] = "--help" else ARGV.shift end require 'rubygems' if ARGV.include?("--dev") require 'rails/generators' require 'rails/generators/rails/app/app_generator' module Rails module Generators class AppGenerator # We want to exit on failure to be kind to other libraries # This is only when accessing via CLI def self.exit_on_failure? true end end end end Rails::Generators::AppGenerator.start
После проверки версии скрипт проверяет, что «new» является первым аргументом, в противном случае он вызывает аргумент «–help». Эта проверка останавливает проблему, когда вы можете случайно набрать неверный аргумент, который приводит к новому приложению Rails с таким ошибочным именем каталога (я делал это ВСЕ время!).
Если все хорошо, мы запускаем AppGenerator и запускаем его. Код AppGenerator , также в жемчужине Railties, находится в rails / generators / rails / app / app_generator.rb . Полный источник этого файла слишком велик для публикации, но вы должны открыть его и посмотреть . Я был приятно удивлен, насколько просто следовать этому коду, и сразу увидел, как я могу изменить генерацию Rails-приложений. В этом же каталоге есть каталог шаблонов , который (как вы уже догадались) является базовой структурой каталогов нового приложения Rails. Файл app_generator.rb содержит несколько классов, определенных в: Generators :: AppGenerator и AppBuilder .
В классе AppBuilder есть методы, такие как copy_file
и empty_directory_with_gitkeep
которые прекрасно показывают, как новое приложение создается из шаблона. Если вы хотите создать какую-либо структуру каталогов в ваших собственных проектах, изучение класса AppBuilder показывает фантастический и поддерживаемый подход.
Класс AppGenerator, который наследуется от AppBase . AppBase (найдите его в rails / generators / app_base.rb в геме railties) определяет подавляющее большинство доступных опций для создания приложения, которое скоро будет рассмотрено (имеется в виду следующий пост). AppGenerator содержит класс AppBuilder , который обрабатывает фактическое построение структуры приложения. Вы можете переопределить класс builder как часть параметров команды «rails new».
В следующем посте мы рассмотрим каждый из вариантов создания нового приложения rails и почему вы можете использовать эти опции. Моя цель - создать наше Rails-приложение, чтобы у нас было что-то осязаемое. Я надеюсь, вам понравится этот более глубокий взгляд на начало работы с Rails. Если есть какие-то фрагменты введения Rails, которые вы хотели бы увидеть или думаете, что я пропускаю, оставьте комментарий ниже.