Ответ 1
Слишком много вопросов здесь, чтобы правильно ответить на них. Это одна из тех вещей, которые будут окупаться для вас, просто копаясь и пробовав ее. По мере того как вы углубляетесь в нее, возвращайтесь и задавайте новые конкретные вопросы.
Вот некоторые из ресурсов, которые я использовал, когда я недавно это сделал.
- http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/
- http://www.themodestrubyist.com/2010/03/16/rails-3-plugins---part-3---rake-tasks-generators-initializers-oh-my/
- http://pragprog.com/titles/jvrails/crafting-rails-applications
- http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
По большей части вы можете хранить вещи в своем каталоге приложений, где они есть. Вы также должны сохранить свой 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