Как преобразовать существующее приложение Rails 3 в движок?

Как мне преобразовать приложение Forum, которое я разрабатывал, в Rails Engine, чтобы его можно было встроить внутри других приложений?

Что добавить, сохранить или удалить? Должен ли я предложить способ интеграции моделей? Как настроить маршруты и конфигурацию пользователя? Как мне упаковать его в Gem? Чего мне следует опасаться?


Прочитав статьи и документацию, мне удалось сузить круг вопросов:

  • Должен ли я именовать модели? То есть я должен хранить их в модуле моего движка и в папке app/models/engine?
  • Какие файлы конфигурации в config я должен хранить?
  • А как насчет папки public? В Rails 3.1 таблицы стилей и javascripts были перемещены в папку app/assets, что решило эту проблему, но как добиться такого же эффекта в Rails 3.0?

person Matheus Moreira    schedule 24.06.2011    source источник


Ответы (1)


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

Вот некоторые из ресурсов, которые я использовал, когда недавно делал это.

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

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

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

gem 'my-forum', :path => '~/work/my-forum'

Пространство имен

Вы должны хотя бы назвать свои таблицы/модели, чтобы не столкнуться с коллизиями имен. Глядя на ваше текущее приложение для форума, я бы, по крайней мере, поставил перед всеми вашими таблицами префикс «forum_». Вполне вероятно, что у кого-то, использующего ваш движок, будет, например, другая модель с именем Category... поэтому ForumCategory будет лучшим выбором.

Определенно пространство имен любых классов, которые вы создаете в каталоге lib.

Файлы конфигурации

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

Общедоступные файлы

С Rails 3.0.x вы можете хранить таблицы стилей и javascripts в общедоступном каталоге. Я думаю, что вам нужно добавить немного кода в свой класс Engine...

initializer "static assets" do |app|
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end
person Aaron Hinni    schedule 24.06.2011
comment
Спасибо! Изучив и опробовав его, мне удалось сузить список вопросов. Однако есть вещи, которые я до сих пор не понял. Обновил мой вопрос, пожалуйста, посмотрите. - person Matheus Moreira; 25.06.2011
comment
Я сделал некоторые дополнения, но вам действительно следует начать новый вопрос о переполнении стека, если вам нужна дополнительная информация. - person Aaron Hinni; 26.06.2011