Проблема создания Rails 3 Engine - PullRequest
5 голосов
/ 17 сентября 2010

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

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

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

Мой файл rails / 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

Предложения

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

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

Я создаю свой первый движок rails прямо сейчас и создалполезная отправная точка и краткий обзор для начала работы:

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

2 голосов
/ 20 сентября 2010

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

Пример локального гема Bundler:

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

Посетите сайт Modern Rubyist.У него есть хорошая серия по созданию Railties и Engines.Возможно, в 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/

...