2010-09-17 26 views
5

Sto lavorando sulla creazione di miei primi Rails 3 motore e attualmente sto ottenendo il seguente messaggio di erroreproblema creando Rails 3 motore

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

Per darvi un po 'più di fondo che non sto facendo il motore come una gemma, ma ho inserito i file Engine nella cartella del fornitore/plug-in. So che c'è un problema con il caricamento nella cartella dei plug-in, ma non sono chiaro su come risolvere il problema.

mie rotaie/file di init.rb nel motore ha il seguente codice

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 

Suggerimenti?

+0

Perché esattamente stai cercando di mettere il motore in vendor/plugins? Qual è la ragione per non svilupparlo come una gemma? Perché non svilupparsi come una gemma? – johnmcaliley

+0

Potrei farlo in quel modo. Nessun motivo particolare non stavo facendo in quel modo, ma pensavo che avrebbe dovuto funzionare in entrambi i modi? –

risposta

2

Penso di aver letto che Railties non funzionava nella directory dei plugin, perché sono destinati a essere caricati in un punto diverso nel processo di avvio dell'applicazione. Consiglierei di creare una gemma usando qualcosa come Jeweler, che fa molto del lavoro per te. Lo scopo del Railtie/Engine è di avere un componente riutilizzabile che possa essere incluso in più app su rotaia. Una volta creata una gemma, puoi puntare al percorso gemma locale all'interno del tuo Gemfile. Ciò consente di vedere le modifiche nel codice del motore all'interno dell'app Rails senza dover creare e reinstallare la gemma ogni volta che si apporta una modifica al codice del motore. Ovviamente vorrai indicare bundler alla gemma installata in produzione. Consiglierei di metterlo su github e di usare quell'URL nel tuo Gemfile in produzione.

Bundler esempio gioiello locale:

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

visitare il sito web del Rubyist moderna. Ha una buona serie sulla creazione di Railties e Motori. Potrebbero esserci state delle modifiche a Rails da quando è stato scritto, ma penso che la maggior parte di esse sia ancora rilevante. Mi ha aiutato un bel po ', quando stavo imparando come scrivere motori con Rails 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, credo che i motori (che sono tipicamente gemme) vs plugin (che vivono nel fornitore) vengono caricati in punti diversi nel processo di inizializzazione dei binari.

I motori hanno in realtà un po 'più di flessibilità, possono agganciarsi più in profondità nei binari. Inoltre, il packaging come gemma presenta molti vantaggi: più facile da condividere attraverso le app, più facile da mantenere in un repository di codice separato, controllo della versione più semplice.

che sto creando il mio primo motore di rotaie in questo momento e ha creato un utile punto di partenza e walk-through per iniziare:

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