Motoren sind genial !! Schauen Sie sich unbedingt den Link an, den Jamie in seiner Antwort gegeben hat ... es ist ein guter Ausgangspunkt. Engines sind der Weg zu Rails 3. Ich habe das Gefühl, dass es eines der leistungsstärksten Features des Frameworks ist, und ich habe fast jede gemeinsame Funktionalität in meinen Apps in Engines umgewandelt. IT spart Ihnen eine Menge Zeit, wenn Sie viele Apps erstellen. Hier ist mein aktueller Workflow beim Erstellen von Engines:
Schritt 1:gem install jeweler
wenn Sie es nicht haben. Dann erstellen Sie ein leeres Juwel mit Juwelier.
Schritt 2: aktualisieren Sie die Rakefile von Juwelier mit Ihrer Edelstein-Info und Abhängigkeiten zur Verfügung gestellt. Möglicherweise müssen Sie eine Dateiliste hinzufügen, damit die Gemspec auf die richtigen Dateien verweist und alle Dateien ausschließt, die Sie beim Erstellen nicht benötigen.
gem.files = FileList['lib/**/*.rb','[A-Z]*', 'lib/**/**/*'].to_a
Schritt 3: Ihre Rails-Anwendung Struktur hinzufügen - app/controllers, app/views, etc .. Zum Verzeichnis auf oberster Ebene in der gem. Sie können auch das Verzeichnis/config für Ihre routes.rb einschließen, das an Ihre Haupt-Apps-Routen angehängt wird.
Schritt 4: Ihre lib wie folgt ein:
/lib/your_engine_name.rb (erfordern engine.rb in dieser Datei und alle anderen Dateien in lib, die Sie benötigen) /lib/your_engine_name/
/lib/your_engine_name/engine.rb
Schritt 5: code In der engine.rb:
require 'your_engine_name'
require 'rails'
module YourEngineName
class Engine < Rails::Engine
#load rake tasks go here
#initializers go here
end
end
Schritt 6: hinzufügen alle kundenspezifischen Maschinencode in app/* und lib/your_engine_name/
Schritt 7: das Juwel Build "Rake build" verwenden.Sie müssen dies tun, so Bündler Ihre Dateien in den gemspec sehen kann (die erzeugt wird, wenn Sie bauen) in Schritt # 8
Schritt 8: Für die lokale Prüfung des lokalen Pfad in der Gemfile Ihrer Hauptanwendung verweisen, in dem Sie wollen den Motor umfassen:
#Gemfile
gem "your_engine_name", :require => "your_engine_name", :path => "/your_engines/your_engine_name"
Schritt 9: Bündel installieren und starten Sie Ihren lokalen Applikationsserver auf.
Schritt 10: Da Sie den lokalen Pfad verweisen, können Sie Änderungen an den Edelstein machen und sie in Ihrem Haupt-App sehen, ohne Wiederaufbau (es sei denn, Sie neue Dateien zum gemspec hinzufügen müssen)
Schritt 11: Setzen Sie Ihre Edelstein Quelle auf GitHub, so dass Sie es in prod verwenden können. Nutzen Sie Juwelier Versioning Rake Aufgaben. Ich kombiniere einige der Rake Aufgaben wie diese, um den git push und Tag im gleichen Schritt und sie in dem Motor Rakefile zu tun:
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
Schritt 12: Wenn der Produktion bereitstellen, um die Quelle ändern in der Gemfile eine Version Tag GitHub und Referenz:
gem 'your_engine_name', :git => '[email protected]:yourusername/your_engine_name.git', :tag=>"v1.1.1"
ich diesen Hack bin mit 2 gem Quellen in Gemfile verweisen, bis sie diese Funktion zu Bündler hinzufügen: http://www.cowboycoded.com/2010/08/10/using-2-sources-for-a-gem-in-different-environments-with-bundler/
Lassen Sie mich wissen, wenn Sie irgendwelche Probleme damit haben. Ich arbeite an einem Blog-Post, um dies ausführlicher zu zeigen, und ich habe vielleicht ein paar Dinge ausgelassen .. nur schreibe dies von der Spitze meines Kopfes jetzt ..
Interessant! Ich werde es mir ansehen. Prost! – Erik