Различия между рельсами и двигателями в Ruby On Rails 3
Я прочитал несколько документов по этим аргументам, но я не понял, что они представляют, каковы различия между ними и если один из них соответствует моим потребностям.
Мне нужно написать часть приложения, которое можно подключить к другому приложению, и я хочу включить его в другие приложения в качестве драгоценного камня. По сути, мне нужна пара моделей, один контроллер и отсутствие представлений, а также некоторая инициализация, поддержка параметров конфигурации, поступающих из приложения-хостинга и генератора.
Правильно ли я?
Что я должен прочитать, чтобы понять, как это сделать?
Update:
Очень хорошая статья с подробными подробностями можно найти здесь.
По существу:
Railtie является ядром Rails Framework и предоставляет несколько перехватов для расширения Rails и/или изменения процесса инициализации.
A Rails:: Engine - это не что иное, как Railtie с уже установленными инициализаторами. И так как Rails:: Application и Rails:: Plugin являются двигателями, описанная здесь конфигурация может использоваться во всех трех.
Ответы
Ответ 1
Railtie, вероятно, может делать то, что вы описываете, но может быть более желательно использовать движок. Двигатель может иметь свою собственную конфигурацию и также действует как приложение Rails, поскольку он позволяет вам включать каталог /app с контроллерами, представлениями и моделями так же, как и обычное приложение Rails.
Прочтите этот блог для получения дополнительной информации
Ответ 2
Rails::Engine
наследует всю функциональность от Rails::Railtie
и добавляет еще несколько ( Engine < Railtie
Исходный код Engine < Railtie
[документы в исходном коде довольно хороши]).
По сути, railtie (== ваш класс, который наследуется от Rails::Railtie
) дает вам все необходимое для взаимодействия с процессами приложения Rails.
И engine (== ваш класс, который наследуется от Rails::Engine
) это railtie +
-
некоторые Инициализаторы набор (с помощью initializer
метода): делает ваш двигатель Rails приложения, как структура папок загружаемый в реальном приложении, так что
engine автоматически загрузит app/models
, app/controllers
, app/helpers
в ваше реальное приложение, загрузит маршруты из config/routes.rb
, загрузит локали из config/locales/*
и загрузит задачи из lib/tasks/*
.
Вы можете увидеть инициализаторы, установленные с этим кодом:
require 'rails/all'
Rails::Railtie.initializers.map(&:name) #=> []
Rails::Engine.initializers.map(&:name) #=> [:set_load_path, :set_autoload_paths, :add_routing_paths, :add_locales, :add_view_paths, :load_environment_config, :append_assets_path, :prepend_helpers_path, :load_config_initializers, :engines_blank_point]
-
некоторые удобные методы, такие как isolate_namespace
.