Статьи

Краткое изучение структуры каталогов Rails

Ruby on Rails — это полноценный веб-фреймворк, написанный на Ruby. Это одна из самых известных веб-фреймворков, которая позволяет легко приступить к разработке. Сегодня я хотел бы объяснить стандартные файлы и папки, сгенерированные Rails. Давайте начнем.

Чтобы создать новое приложение Rails, все, что нам нужно сделать, это запустить следующую команду:

rails new sample_app 

Приведенная выше команда генерирует структуру каталогов, которую мы обсуждаем сегодня. Это может измениться, если вы используете более старую версию Rails. Эта статья основана на последней версии Rails, которая на момент написания статьи была 4.2.4 . Вы можете найти версию, установленную в вашей системе, набрав это в консоли

 rails version => Rails 4.2.4 

Структура каталогов,

 . |-- app | |-- assets | | |-- images | | |-- javascripts | | | `-- application.js | | `-- stylesheets | | `-- application.css | |-- controllers | | |-- application_controller.rb | | `-- concerns | |-- helpers | | `-- application_helper.rb | |-- mailers | |-- models | | `-- concerns | `-- views | `-- layouts | `-- application.html.erb |-- bin | |-- bundle | |-- rails | |-- rake | |-- setup | `-- spring |-- config | |-- application.rb | |-- boot.rb | |-- database.yml | |-- environment.rb | |-- environments | | |-- development.rb | | |-- production.rb | | `-- test.rb | |-- initializers | | |-- assets.rb | | |-- backtrace_silencers.rb | | |-- cookies_serializer.rb | | |-- filter_parameter_logging.rb | | |-- inflections.rb | | |-- mime_types.rb | | |-- session_store.rb | | `-- wrap_parameters.rb | |-- locales | | `-- en.yml | |-- routes.rb | `-- secrets.yml |-- config.ru |-- db | `-- seeds.rb |-- Gemfile |-- Gemfile.lock |-- lib | |-- assets | `-- tasks |-- log |-- public | |-- 404.html | |-- 422.html | |-- 500.html | |-- favicon.ico | `-- robots.txt |-- Rakefile |-- README.rdoc |-- test | |-- controllers | |-- fixtures | |-- helpers | |-- integration | |-- mailers | |-- models | `-- test_helper.rb |-- tmp | `-- cache | `-- assets `-- vendor `-- assets |-- javascripts `-- stylesheets 

Мы пройдемся по каждому каталогу, один за другим, сейчас.

приложение

Это основной каталог всего вашего приложения, и большая часть кода приложения будет идти в этот каталог. Как вы, возможно, знаете, Rails является средой MVC, что означает, что приложение разделено на части по назначению в модели, представлении или контроллере. Эти три раздела находятся внутри этого каталога.

приложение / активы

Он содержит статические файлы, необходимые для внешнего интерфейса приложения, сгруппированные в папки по типу. Файлы javascript и таблицы стилей (CSS) в этих папках должны быть привязаны к конкретному приложению, поскольку файлы внешних библиотек перейдут в другой каталог ( vendor ), который мы рассмотрим чуть позже.

приложение / активы / изображения

Все изображения, необходимые для приложения, должны идти в этот каталог. Изображения здесь доступны в виде через image_tag("img_name.png") помощников, таких как image_tag("img_name.png") так что вам не нужно указывать относительный или абсолютный путь для изображений.

приложение / активы / JavaScripts

Файлы JavaScript идут сюда. Существует соглашение о создании файлов JS для каждого контроллера. Например, для books_controller.rb JS-функциями для представлений этого контроллера были бы books.js .

приложение / активы / JavaScripts / application.js

Предварительно созданный application.js является манифестом для требований javascript всего приложения. Rails использует конвейер ресурсов для компиляции и обслуживания ресурсов. Это означает, что application.js — это файл, в котором вы ссылаетесь на специфичные для приложения файлы JS, которые объединяются и минимизируются перед отправкой в ​​представления.

Постарайтесь как можно больше, чтобы не создавать функции javascript в этом файле.

приложение / активы / таблицы стилей

Подобно /javascripts , CSS-файлы находятся здесь. Соглашение об именах также совпадает с активами javascript.

Приложение / активы / таблицы стилей / application.css

Этот файл является манифестом для таблиц стилей в приложении. Как и в application.js , указанные файлы подаются в виде единой таблицы стилей для представления.

приложение / контроллеры

Это где все файлы контроллера идут. Контроллеры отвечают за организацию модели и представлений. Соглашение о присвоении имен для файла — это название модели во множественном числе + «_controller». Например, контроллером для модели Book является books_controller.rb , который называется «случай змеи». Кроме того, класс контроллера будет CamelCase, который является BooksController .

Скрипт для генерации контроллера:

 rails generate controller controller_name action1 action2 

приложение / контроллеры / application_controller.rb

Это основной контроллер, от которого наследуются все остальные контроллеры. Методы ApplicationController доступны и для других контроллеров. Этот контроллер наследуется от модуля ActionController::Base , который имеет набор методов для работы в контроллерах.

приложение / контроллеры / проблемы

Concerns — это модули, которые можно использовать на контроллерах. Это полезно, чтобы высушить ваш код путем реализации многократно используемых функций внутри каталога. Соглашение об именах — module_name.rb .

приложение / хелперы

Здесь находятся все вспомогательные функции для представлений. Уже есть несколько предварительно созданных помощников, таких как тот, на который мы image_tag выше ( image_tag ) для ссылки на изображения в представлениях. Вы можете создавать свои собственные функции в специальном вспомогательном файле контроллера, который будет создаваться автоматически при использовании генераторов Rails для создания контроллера. Соглашение об именах: controller_name_helper.rb .

приложение / хелперы / application_helper.rb

Это корневой помощник. Подобно application_controller.rb , написанные здесь функции будут доступны во всех помощниках по умолчанию и во всех представлениях.

приложение / почтовые программы

Каталог mailers содержит почтовые (как в «электронной почте») специальные функции для приложения. Почтовые программы похожи на контроллеры, и они будут иметь свои файлы представлений в app/views/mailer_name/ . Чтобы сгенерировать почтовую программу, вы можете запустить следующую команду

 rails generate mailer MailerName 

При первом создании почтовой программы application_mailer.rb автоматически создается для вас. Это наследуется от ActionMailer::Base и устанавливает адрес по умолчанию, а также layout для ваших почтовых представлений. Последующие почтовые программы будут наследоваться от ApplicationMailer .

Соглашение об именах аналогично контроллерам: modelname_mailer.rb . Вы можете прочитать больше о почтовых программах здесь .

приложение / модели

Все файлы app/models каталоге app/models . Модели выступают в роли объектно-реляционных картографов для таблиц базы данных, в которых хранятся данные. Соглашение об именах — просто modelname.rb . Название модели, как правило, является единственной формой базовой таблицы, которая представляет модель в базе данных. Таким образом, модель Book будет отображена поверх таблицы books в базе данных. Вы можете узнать больше о моделях Rails здесь .

приложение / модель / проблемы

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

приложение / просмотров

Третья часть архитектуры MVC — это виды. Файлы, связанные с представлениями, попадают в этот каталог. Файлы представляют собой комбинацию HTML и Ruby (называемые Embedded Ruby или Erb) и организованы на основе контроллера, которому они соответствуют. Существует файл вида для каждого действия контроллера. Например, BooksController#index будет иметь соответствующее представление как

 app/views/books/index.html.erb 

Это еще одно из соглашений Rails, и оно может быть нарушено. Другими словами, вы можете явно визуализировать любое представление вручную.

приложение / просмотров / макеты

Эта папка содержит макет для всех ваших файлов просмотра, которые они наследуют. Файлы, созданные здесь, доступны для всех файлов просмотра.

Вы можете создать несколько макетов, относящихся к частям приложения. Например, если мы хотим создать отдельный макет для административных представлений и пользовательских представлений, мы можем достичь этого, создав макет с именем контроллера. Для всех представлений admin.html.erb создайте файл макета с именем admin.html.erb который затем будет действовать как макет для представлений администратора, а также для любого контроллера, унаследованного от AdminController .

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

приложение / просмотров / макеты / application.html.erb

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

бункер

Этот каталог содержит Binstubs для приложения Rails. Binstubs — это не что иное, как обертки для запуска исполняемых файлов gem, относящихся к вашему приложению. Это можно использовать вместо bundle exec <command> . Доступными по умолчанию Binstubs являются bundle , rails , rake , setup и spring . Любой из этих binstubs может быть выполнен:

 bin/<executable> 

конфиг

Как следует из названия, он содержит все файлы конфигурации приложения. Соединение с базой данных и поведение приложения могут быть изменены файлами в этом каталоге.

конфиг / application.rb

Он содержит основную конфигурацию приложения, такую ​​как часовой пояс, язык и многие другие параметры. Полный список можно найти здесь . Также обратите внимание, что указанные здесь конфигурации предназначены для всех сред (разработки, тестирования и производства). Конфигурации, специфичные для среды, перейдут в другие файлы, которые мы увидим ниже.

конфиг / boot.rb

boot.rb , как вы можете себе представить, «загружает» приложение Rails. Приложения Rails хранят Gemfile зависимости в файле с именем Gemfile в корневом Gemfile проекта. Gemfile содержит все зависимости, необходимые для запуска приложения. boot.rb проверяет, действительно Gemfile присутствует Gemfile и сохраняет путь к этому файлу в переменной окружения с именем BUNDLE_GEMFILE для дальнейшего использования. boot.rb также требует 'bundler/setup' который будет извлекать и Gemfile гемы, упомянутые в Gemfile используя Bundler.

конфиг / database.yml

Этот файл содержит всю конфигурацию базы данных, необходимую приложению. Здесь разные конфигурации могут быть установлены для разных сред.

конфиг / environment.rb

Этот файл требует application.rb для инициализации приложения Rails.

конфиг / routes.rb

Это где все маршруты приложения определены. Существуют разные семантики для объявления маршрутов, примеры которых можно найти в этом файле.

конфиг / secrets.yml

Недавно добавленный в Rails 4.1, это дает вам место для хранения секретов приложений. Определенные здесь секреты доступны по всему приложению с использованием Rails.application.secrets.<secret_name> . Вы можете прочитать больше о secrets.yml из заметок о выпуске .

Config / сред

Как я уже упоминал выше, эта папка содержит файлы конфигурации для среды разработки, тестирования и производства. Конфигурации в application.rb доступны во всех средах, в то время как вы можете выделить разные конфигурации для разных сред, добавив настройки в среду под названием файлы в этом каталоге. Доступны файлы среды по умолчанию: development.rb , production.rb , test.rb , но при необходимости вы можете добавить другие.

Config / Инициализаторы

Этот каталог содержит список файлов, которые необходимо запустить в процессе инициализации Rails. Любой файл *.rb который вы здесь создадите, будет запущен во время инициализации автоматически. Например, константы, которые вы объявляете здесь, будут доступны в вашем приложении. Файл инициализатора запускается из вызова в config/environment.rb в Rails.application.initialize! ,

Есть основные инициализаторы, о которых я расскажу здесь, но вы можете добавить любой понравившийся вам файл Ruby. Фактически, многие гемы Rails требуют инициализатора для завершения настройки этого гема для вашего приложения Rails.

конфиг / Инициализаторы / assets.rb

Это содержит конфигурацию для конвейера активов. Он будет иметь только одну конфигурацию по умолчанию, Rails.application.config.assets.version , которая является версией для вашего пакета ресурсов. Вы также можете указать конфигурации, такие как добавление пути дополнительных ресурсов или других элементов для предварительной компиляции.

конфиг / Инициализаторы / backtrace_silencers.rb

Здесь вы можете добавить backtrace_silencers и фильтры, которые могут быть применимы для вашего приложения. Фильтры обратной трассировки — это не что иное, как фильтры, которые помогают уточнить трассировку стека при возникновении ошибки. Silencers, с другой стороны, позволяют отключить все трассировки стека от указанных драгоценных камней.

конфиг / Инициализаторы / cookie_serializer.rb

Здесь не так много настроек. Он содержит спецификации для сериализации файлов cookie приложения. Вы можете прочитать больше об обработке файлов cookie в Rails здесь .

конфиг / Инициализаторы / filter_parameter_logging.rb

Здесь вы можете добавить параметры, которые могут содержать конфиденциальную информацию и которые вы не хотите отображать в своих журналах. По умолчанию параметр «пароль» будет отфильтрован.

конфиг / Инициализаторы / inflections.rb

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

конфиг / Инициализаторы / mime_type.rb

Добавьте конфигурации MIME (Multi-target Internet Mail Extensions) для своего приложения здесь, чтобы обрабатывать различные типы файлов, которые вы, возможно, захотите использовать. Список опций, доступных в Mime API, можно найти здесь .

конфиг / Инициализаторы / session_store.rb

Этот файл содержит базовое хранилище сеансов для использования в вашем приложении для хранения сеансов. Значение по умолчанию :cookie_store , то есть сеансы хранятся в :cookie_store cookie браузера, но вы можете изменить его на один из четырех вариантов. Опции и больше о хранилище сессий доступны здесь .

конфиг / Инициализаторы / wrap_parameters.rb

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

конфиг / локали

Это список файлов YAML для каждого языка, который содержит ключи и значения для перевода битов приложения. Вы можете узнать об интернационализации (i18n) и настройках здесь .

децибел

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

дБ / seeds.rb

Этот файл используется для предварительного заполнения или «заполнения» базы данных необходимыми записями. Вы можете использовать обычные методы ActiveRecord для вставки записи.

Gemfile

Gemfile — это место, где объявлены все гем-зависимости вашего приложения. Этот файл является обязательным, так как он включает в себя основные драгоценные камни Rails, среди других драгоценных камней. Вы можете узнать все о Bundler и Gemfiles на веб-сайте Bundler .

Gemfile.lock

Gemfile.lock содержит дерево зависимостей gem, включая все версии, для приложения. Этот файл генерируется bundle install на вышеупомянутом Gemfile . По сути, он блокирует зависимости вашего приложения от конкретных версий.

Lib

lib каталоге lib находятся все библиотеки приложений. Специфичные для приложения библиотеки — это повторно используемый универсальный код, извлеченный из приложения. Думайте об этом как о конкретной жемчужине приложения.

Lib / активы

Этот файл содержит все ресурсы библиотеки, то есть те элементы (скрипты, таблицы стилей, изображения), которые не зависят от приложения.

Lib / задачи

Задачи Rake и другие задачи приложения могут быть помещены в этот каталог. Упомянутые здесь задачи Rake требуются Rakefile приложения, который мы увидим ниже.

журнал

Это содержит все файлы журнала. Rails автоматически создает файлы для каждой среды.

общественности

Общий каталог содержит некоторые общие файлы для веб-приложений. По умолчанию генерируются шаблоны HTML для ошибок HTTP, такие как 404, 422 и 500, а также файл favicon и файл robots.txt . Файлы, которые находятся в этом каталоге, доступны по https://appname.com/filename напрямую.

Rakefile

Чуть выше я упомянул, что файлы Rake, созданные внутри lib/tasks , доступны через приложение через модуль Rake. Это возможно из-за Rakefile, который требует application.rb и вызывает Rails.application.load_tasks . Вызов load_tasks загружает все файлы *.rake из папки lib/tasks .

тестовое задание

Название папки говорит само за себя. Это содержит все тестовые файлы для приложения. Подкаталог создается для тестовых файлов каждого компонента.

TMP

Это временный каталог для приложения, в котором хранятся файлы, например кэши. Вам не нужно беспокоиться об этом каталоге, поскольку он полностью управляется самим Rails. Но есть несколько доступных команд, если вы хотите взять под контроль каталог, который можно найти здесь

поставщик / активы

Это то место, куда идут файлы вендора, такие как библиотеки JavaScript, CSS-файлы и другие. Добавленные здесь файлы автоматически станут частью конвейера ресурсов.

Вывод

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