Обе опции генерируют двигатель .Разница в том, что --mountable
создаст движок в изолированном пространстве имен, тогда как --full
создаст движок, который разделяет пространство имен основного приложения.
Различия будут проявляться тремя способами:
1) Файл класса движка будет вызывать isolate_namespace
:
lib / my_full_engine / engine.rb:
module MyFullEngine
class Engine < Rails::Engine
end
end
lib / my_mountable_engine / engine.rb:
module MyMountableEngine
class Engine < Rails::Engine
isolate_namespace MyMountableEngine # --mountable option inserted this line
end
end
2) Файл config/routes.rb
движка будет иметь пространство имен:
Полный движок:
Rails.application.routes.draw do
end
Установленный движок:
MyMountableEngine::Engine.routes.draw do
end
3) Структура файла для контроллеров, помощников, представлений иресурсы будут иметь пространство имен:
создать приложение / контроллеры / my_mountable_engine / application_controller.rb
создать приложение / helpers / my_mountable_engine / application_helper.rb
создать приложение / почтовые программы создать приложение / модели
создать приложение / views / layouts / my_mountable_engine / application.html.erb
crесть приложение / assets / images / my_mountable_engine
создать приложение / assets / stylesheets / my_mountable_engine / application.css
создать приложение / assets / javascripts / my_mountable_engine / application.js
создать config / rout.rb создать lib / my_mountable_engine.rb
создать lib / tasks / my_mountable_engine.rake
создать lib / my_mountable_engine / version.rb
создать lib / my_mountable_engine/engine.rb
Пояснение
Вариант использования опции --full
представляется очень ограниченным.Лично я не могу придумать ни одной веской причины, по которой вы захотите разделить ваш код на движок без изоляции пространства имен. По сути, это просто даст вам два тесно связанных приложения, использующих идентичные файловые структуры и все конфликты и утечку кода.это влечет за собой.
Каждая часть документации, которую я видел, демонстрирует опцию --mountable
, и, действительно, текущее руководство по краям настоятельно рекомендует вам включить isolate namespace
- то же самое, что сказать "использование" --mountable
over --full
.
Наконец, возникла путаница с терминологией: К сожалению, rails plugin -h
показывает следующие описания:
[- full] # Создать rails engine с приложением Rails для тестирования
[--mountable] # Создать монтируемое изолированное приложение
Создается впечатление, что вы используете --full
для создания «движка» и --mountable
создать что-то еще, называемое «монтируемое приложение», когда на самом деле они оба движка - одно пространство имен, а другое нет.Это может привести к путанице, поскольку пользователи, желающие создать движок, скорее всего, предположят, что --full
является более подходящим вариантом.
Заключение
rails plugin new something --full
= Двигатель в вашем приложенииПространство имен.(С чего бы это?) rails plugin new something --mountable
= Двигатель со своим собственным пространством имен.(Великолепно)
Ссылки