Здесь слишком много вопросов, чтобы ответить на них должным образом. Это одна из тех вещей, которые окупятся для вас, если вы просто покопаетесь и попробуете. Когда вы углубитесь в это, вернитесь и задайте новые конкретные вопросы.
Вот некоторые из ресурсов, которые я использовал, когда недавно делал это.
По большей части вы можете хранить вещи в каталоге вашего приложения там, где они есть. Вы также должны иметь возможность хранить свой 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