2010-09-17 9 views
5

pracuję na tworzenie mojej pierwszej szyny 3 silnik i jestem obecnie otrzymuję następujący komunikat o błędzieProblem tworzenia Rails 3 Silnik

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

Aby dać nieco więcej tła nie robię Engine jako klejnot, ale umieściłem pliki Engine w folderze venders/plugins. Wiem, że istnieje problem z ładowaniem w folderze wtyczek, ale nie jestem pewien, jak rozwiązać problem.

Moi szyny/plik init.rb w silniku ma następujący kod

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 

sugestie?

+0

Dlaczego właśnie ty próbujesz umieścić silnik w vendor/plugins? Z jakiego powodu nie rozwijasz go jako klejnot? Dlaczego nie rozwijać się jak klejnot? – johnmcaliley

+0

Mogłem to zrobić w ten sposób. Nie ma szczególnego powodu, że nie robiłem tego w ten sposób, ale myślałem, że to ma działać w obu kierunkach? –

Odpowiedz

2

Myślę, że pamiętam, że czytałem, że Railties nie działa w katalogu wtyczek, ponieważ są one przeznaczone do załadowania w innym momencie procesu uruchamiania aplikacji. Polecam tworzenie klejnotów za pomocą czegoś takiego jak Jubiler, który wykonuje dla ciebie dużo pracy. Celem Railtie/Engine jest posiadanie komponentu wielokrotnego użytku, który może być zawarty w wielu aplikacjach railsowych. Po utworzeniu klejnotu możesz wskazać lokalną ścieżkę klejnotu w swoim Gemfile. Pozwala to zobaczyć zmiany w kodzie silnika wewnątrz aplikacji szyny bez konieczności budowania i ponownej instalacji gem za każdym razem, gdy wprowadzasz zmianę kodu silnika. Oczywiście, chciałbyś wskazać bundlerowi zainstalowany klejnot w produkcji. Polecam umieszczenie go na github i użycie tego adresu URL w Gemfile podczas produkcji.

Bundler lokalnym przykładem gem:

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

Wyjazd stronie nowoczesnego Rubyist użytkownika. Ma dobry serial na temat tworzenia Railties and Engines. Możliwe, że zmieniły się Railsy, ​​ponieważ zostały napisane, ale myślę, że większość z nich jest nadal aktualna. To pomogło mi się sporo, gdy uczyłem się, jak napisać Silniki z 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, wierzę silniki (które są zwykle perełki) vs wtyczek (które mieszkają w dostawcy) są ładowane w różnych punktach procesu inicjowania szyn.

Silniki faktycznie mają nieco większą elastyczność, mogą mocniej zagłębić się w szyny. Ponadto opakowanie jako klejnot ma wiele zalet: łatwiej udostępniać w aplikacjach, łatwiejsze do utrzymania w oddzielnym repozytorium kodu, łatwiejszej kontroli wersji.

tworzę swój pierwszy silnik szyn teraz i stworzył użyteczny punkt początkowy i kabiną dzięki za podręczny:

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