Двигатели потрясающие !!Определенно посмотрите на ссылку, предоставленную Джейми в своем ответе. Это хорошая отправная точка.Двигатели - это путь к Rails 3. Я чувствую, что это одна из самых мощных функций фреймворка, и я преобразовал почти все части общих функций в своих приложениях в движки.Это экономит вам массу времени, если вы создаете много приложений.Вот мой текущий рабочий процесс при создании движков:
Шаг 1: gem install jeweler
, если у вас его нет.Затем создайте пустой драгоценный камень с помощью jeweler.
Шаг 2: обновите Rakefile, предоставленный jeweler, вашей информацией о драгоценном камне и любыми зависимостями.Вам может понадобиться добавить список файлов, чтобы gemspec мог указывать на правильные файлы и исключать любые файлы, которые вам не нужны при его создании.
gem.files = FileList['lib/**/*.rb','[A-Z]*', 'lib/**/**/*'].to_a
Шаг 3: Добавьте свой Railsструктура приложения - app / controllers, app / views и т. д. в каталоге верхнего уровня в геме.Вы также можете включить / config каталог для вашего rout.rb, который будет добавлен к вашим основным приложениям маршрутов.
Шаг 4: Настройте свой каталог lib следующим образом:
/ lib / your_engine_name.rb (требуется engine.rb в этом файле и любых других файлах в lib, которые вам нужны) / lib / your_engine_name /
/lib/your_engine_name/engine.rb
Шаг 5: Добавьте код в engine.rb:
require 'your_engine_name'
require 'rails'
module YourEngineName
class Engine < Rails::Engine
#load rake tasks go here
#initializers go here
end
end
Шаг 6: Добавьте весь свой собственный код движка в app / * и lib /your_engine_name /
Шаг 7: Создайте драгоценный камень, используя "rake build".Вы должны сделать это, чтобы Bundler мог видеть ваши файлы в gemspec (который создается при сборке) на шаге № 8
Шаг 8: Для локального тестирования обратитесь к локальному пути в Gemfileвашего основного приложения, в которое вы хотите включить движок:
#Gemfile
gem "your_engine_name", :require => "your_engine_name", :path => "/your_engines/your_engine_name"
Шаг 9: Устанавливайте пакет и запускайте локальный сервер приложений.
Шаг10: Поскольку вы ссылаетесь на локальный путь, вы можете вносить изменения в гем и просматривать их в своем основном приложении без перестройки (если только вам не нужно добавлять новые файлы в gemspec)
Шаг 11: поместите ваш источник драгоценных камней на github, чтобы вы могли использовать его в prod.Используйте грабли для ювелиров, которые управляют версионностью.Я объединяю некоторые из таких задач с граблями, чтобы выполнить git push и tag на одном шаге и включить их в Rakefile движка:
namespace :version do
desc "create a new version, create tag and push to github"
task :github_and_tag do
Rake::Task['github:release'].invoke
Rake::Task['git:release'].invoke
end
desc "bump patch push to github"
task :patch_release do
Rake::Task['version:bump:patch'].invoke
Rake::Task['version:github_and_tag'].invoke
end
desc "bump minor push to github"
task :minor_release do
Rake::Task['version:bump:minor'].invoke
Rake::Task['version:github_and_tag'].invoke
end
desc "bump major push to github"
task :major_release do
Rake::Task['version:bump:major'].invoke
Rake::Task['version:github_and_tag'].invoke
end
end
Шаг 12: При развертываниидля производства, измените источник в Gemfile на github и укажите тег версии:
gem 'your_engine_name', :git => 'git@github.com:yourusername/your_engine_name.git', :tag=>"v1.1.1"
Я использую этот хак для ссылки на 2 источника Gem в Gemfile, пока они не добавят эту функцию в Bundler: http://www.cowboycoded.com/2010/08/10/using-2-sources-for-a-gem-in-different-environments-with-bundler/
Дайте мне знать, если у вас есть какие-либо проблемы с этим.Я работаю над сообщением в блоге, чтобы показать это более подробно, и, возможно, я упустил несколько вещей ... просто пишу это прямо сейчас ...