Различия между рельсами и двигателями в Руби-на-Рельсах 3 - PullRequest
27 голосов
/ 27 июня 2011

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

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

Я на правильном пути?

Что я должен прочитать, чтобы понять, как это сделать?

Обновление:

Очень хорошая статья с большим количеством деталей может быть найдена здесь .

По существу:

Railtie является ядром Rails Framework и предоставляет несколько хуков для расширения Rails и / или изменения процесса инициализации.

A Rails:: Engine - это не что иное, как Railtie с уже установленными инициализаторами.А поскольку Rails :: Application и Rails :: Plugin являются движками, описанная здесь конфигурация может использоваться во всех трех.

Ответы [ 2 ]

7 голосов
/ 28 июня 2011

Railtie, вероятно, может делать то, что вы описываете, но может быть более желательно использовать движок.Движок может иметь свою собственную конфигурацию, а также действовать как приложение Rails, поскольку он позволяет включать каталог / app с контроллерами, представлениями и моделями так же, как обычное приложение Rails.

Прочитайте этот блог для получения дополнительной информации

4 голосов
/ 24 ноября 2015

Rails::Engine наследует всю функциональность от Rails::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.

...