Подтвердить что ты не робот

Различия между рельсами и двигателями в Ruby On Rails 3

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

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

Правильно ли я?

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

Update:

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

По существу:

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

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

4b9b3361

Ответ 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.