2010-09-17 11 views
5

estoy trabajando en la creación de mis primeros carriles 3 del motor y actualmente estoy recibiendo el mensaje de error siguienteproblema al crear Rails 3 del motor

is a Railtie/Engine and cannot be installed as plugin (RuntimeError) 

Para darle un poco más de fondo que no estoy haciendo el motor como una joya, pero he colocado los archivos del motor en la carpeta de proveedores/complementos. Sé que hay un problema con la carga cuando está en la carpeta de complementos, pero no tengo claro cómo resolver el problema.

Mis rieles/archivo init.rb en el motor tiene el siguiente código

require 'rails' 

module RailsApp 
    module MyEngine 
    class Engine < Rails::Engine 

     config.after_initialize do 
     RailsApp::GameType.register do |game_type| 
      game_type.name = "TreasureIsland" 
      game_type.version = "0.1" 
      game_type.thumbnail = "teasure_island.jpg" 
     end 
     end 
    end 
    end 
end 

Sugerencias?

+0

¿Por qué estás tratando de poner el motor en proveedores/plugins? ¿Cuál es la razón para no desarrollarlo como una joya? ¿Por qué no solo desarrollarse como una gema? – johnmcaliley

+0

Podría hacerlo de esa manera. No hay una razón en particular por la que no lo esté haciendo de esa manera, ¿pero pensé que estaba destinado a funcionar de cualquier manera? –

Respuesta

2

Creo que recuerdo haber leído que Railties no funcionaría en el directorio de complementos, ya que están destinados a cargarse en un punto diferente del proceso de inicio de la aplicación. Recomendaría crear una joya usando algo como Joyero, que hace mucho del trabajo por ti. El objetivo de Railtie/Engine es tener un componente reutilizable que se pueda incluir en múltiples aplicaciones de rieles. Una vez que haya creado una gema, puede señalar la ruta de la gema local dentro de su Gemfile. Esto le permite ver los cambios en el código de su motor dentro de la aplicación de rieles sin tener que construir y volver a instalar la gema cada vez que realice un cambio en el código del motor. Por supuesto, le conviene apuntar el paquete a la gema instalada en producción. Recomendaría ponerlo en github y usar esa URL en su Gemfile en producción.

Bündler ejemplo joya local:

#Gemfile 
gem "my_engine", :require => "my_engine", :path => "/my_engines/my_engine" 

visite el sitio web de la Rubyist moderna. Él tiene una buena serie sobre la creación de Railties y Motores. Puede haber habido algunos cambios en Rails desde que se escribió esto, pero creo que la mayor parte sigue siendo relevante. Me ayudó un poco bueno cuando estaba aprendiendo a escribir motores con rieles 3.

http://www.themodestrubyist.com/2010/03/01/rails-3-plugins---part-1---the-big-picture/
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://www.themodestrubyist.com/2010/03/22/rails-3-plugins---part-4---more-on-generators/

2

John, creo que los motores (que son típicamente gemas) vs plugins (que viven en el proveedor) se cargan en diferentes puntos en el proceso de inicialización de los rieles.

Los motores en realidad tienen un poco más de flexibilidad, pueden engancharse más profundamente en los rieles. Además, el empaquetado como una joya tiene muchas ventajas: es más fácil de compartir en todas las aplicaciones, más fácil de mantener en un repositorio de código separado y facilita el control de la versión.

estoy creando mi primer motor de rieles en este momento y ha creado un punto de partida útil y walk-through para empezar:

http://keithschacht.com/creating-a-rails-3-engine-plugin-gem/

Cuestiones relacionadas