motores son impresionantes !! Definitivamente mira el enlace que Jamie proporcionó en su respuesta ... es un buen punto de partida. Los motores son el camino a seguir con Rails 3. Siento que es una de las características más potentes del framework, y convertí casi todas las funciones comunes de mis aplicaciones en motores. Te ahorrará muchísimo tiempo si estás creando muchas aplicaciones. Aquí está mi flujo de trabajo actual al crear motores:
Paso 1:gem install jeweler
si no lo tiene. Luego crea una gema en blanco usando joyero.
Paso 2: actualice el Rakefile proporcionado por el joyero con su información de gema y sus dependencias. Es posible que necesite agregar una lista de archivos para que gemspec pueda señalar los archivos correctos y excluir cualquier archivo que no desee al crearlo.
gem.files = FileList['lib/**/*.rb','[A-Z]*', 'lib/**/**/*'].to_a
Paso 3: Añadir la estructura de su aplicación Rails - app/controllers, app/views, etc .. en el directorio de nivel superior en la gema. También puede incluir el directorio/config para su routes.rb que se agregará a sus rutas principales de aplicaciones.
Paso 4: Configurar el directorio lib de esta manera:
/lib/your_engine_name.rb (requiere engine.rb en este archivo y cualquier otro archivos en lib que usted necesita) /lib/your_engine_name/
/lib/your_engine_name/engine.rb
Paso 5: Añadir un código a engine.rb:
require 'your_engine_name'
require 'rails'
module YourEngineName
class Engine < Rails::Engine
#load rake tasks go here
#initializers go here
end
end
Paso 6: Añadir todo el código del motor a medida para aplicación/* y lib/your_engine_name/
Paso 7: Construir la gema el uso de "acumulación rastrillo".Debe hacerlo de manera Bündler puede ver sus archivos en el gemspec (que se genera cuando se construye) en el paso # 8
Paso 8: Para la prueba de referencia local la ruta local en el Gemfile de su aplicación principal, donde querer incluir el motor:
#Gemfile
gem "your_engine_name", :require => "your_engine_name", :path => "/your_engines/your_engine_name"
Paso 9: paquete de instalar y poner en marcha el servidor de aplicación local.
Paso 10: Dado que se hace referencia a la ruta de acceso local, puede realizar cambios en la gema y verlos en su aplicación principal sin reconstrucción (a menos que necesite añadir nuevos archivos a la gemspec)
Paso 11: pon tu fuente de gemas en github para que puedas usarla en prod. Haga uso de joyeros versionando tareas de rake. Combino algunas de las tareas del rastrillo de este tipo con el fin de hacer el git push y la etiqueta en el mismo paso e incluirlos en Rakefile del motor:
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
Paso 12: Al desplegar a la producción, cambiar la fuente en el Gemfile a github y hacer referencia a una etiqueta de versión:
gem 'your_engine_name', :git => '[email protected]:yourusername/your_engine_name.git', :tag=>"v1.1.1"
estoy usando este truco para hacer referencia 2 fuentes de gemas en Gemfile hasta que añaden que función para Bündler: http://www.cowboycoded.com/2010/08/10/using-2-sources-for-a-gem-in-different-environments-with-bundler/
Avíseme si tiene algún problema con esto. Estoy trabajando en una publicación de blog para mostrar esto con más detalle y es posible que haya omitido algunas cosas ... simplemente escribir esto en la cabeza ahora mismo ...
¡Interesante! Lo echaré un vistazo. ¡Aclamaciones! – Erik