2010-09-17 2 views
5

Я работаю над созданием моего первым Rails 3 двигателя и я в настоящее время получаю следующее сообщение об ошибкеПроблема создания Rails 3 Engine

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

Чтобы дать вам немного больше фона я не делаю Двигатель как драгоценный камень, но я помещаю файлы Engine в папку vendor/plugins. Я знаю, что есть проблема с загрузкой в ​​папке плагинов, но я не понимаю, как решить проблему.

Мои рельсы/init.rb файл в двигателе имеет следующий код

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 

Предложения?

+0

Почему именно вы пытаетесь поставить двигатель в поставщике/плагин? В чем причина его развития как драгоценного камня? Почему бы просто не развиться как драгоценный камень? – johnmcaliley

+0

Я мог бы сделать так. Никакой особой причины я не делал так, но просто думал, что это должно работать в любом случае? –

ответ

2

Я думаю, что я помню, как читал, что Railties не будет работать в каталоге плагинов, потому что они предназначены для загрузки в другую точку процесса загрузки приложения. Я бы рекомендовал создать драгоценный камень, используя что-то вроде Jeweler, которое делает много работы для вас. Цель Railtie/Engine состоит в том, чтобы иметь повторно используемый компонент, который может быть включен в несколько приложений с рельсами. Когда у вас есть созданный драгоценный камень, вы можете указать на локальный путь Gem в вашем Gemfile. Это позволяет вам видеть изменения в вашем коде двигателя внутри вашего приложения rails без необходимости создавать и переустанавливать драгоценный камень каждый раз, когда вы вносите изменения в код двигателя. Конечно, вы хотели бы указать поставщика на установленный драгоценный камень на производстве. Я бы рекомендовал поместить его в github и использовать этот URL в вашем Gemfile в процессе производства.

Bundler местный пример перл:

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

Заканчивать сайт Современный Rubyist в. У него хорошая серия по созданию железных дорог и двигателей. Возможно, были некоторые изменения в Rails, поскольку это было написано, но я думаю, что большинство из них по-прежнему актуальны. Это помогло мне хороший бит, когда я узнавал, как писать двигатели с 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

Джон, я считаю, двигатели (которые, как правило, драгоценные камни) против плагинов (которые живут в поставщике) загружаются в разных точках процесса инициализации рельсов.

Двигатели на самом деле имеют немного большую гибкость, они могут зацепиться глубже в рельсы. Кроме того, упаковка как драгоценный камень имеет множество преимуществ: проще делиться между приложениями, проще поддерживать в отдельном репо кода, упростить управление версиями.

Я создаю мой первые Рельсы двигатель прямо сейчас, и создал полезную отправную точку и проходные для начала работы:

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

Смежные вопросы