Как я могу изменить конфигурацию Rails в плагине движка? - PullRequest
5 голосов
/ 21 июля 2009

Я работаю над движком для Rails в качестве плагина. Мне бы хотелось, чтобы он мог вносить необходимые изменения в конфигурацию Rails при загрузке, чтобы он мог указать свои зависимости Gem, а также добавить несколько путей загрузки.

Файл init.rb плагина имеет доступ к объекту config, но он фактически доступен только для чтения, вы можете указать гем, но это не имеет значения, инициализатор должен уже работать на этом этапе.

Сейчас я справился с этим, потребовав файл с новым блоком Rails :: Initializer, например:

Rails::Initializer.run do |config|
  config.gem "authlogic", :version => ">= 2.0.9"
  # etc
end

Это работает, но стирает любую существующую конфигурацию в среде основного приложения. Rb.

Может быть, я могу решить эту проблему, имея генератор в движке, который добавляет что-то в environment.rb, который загружает конфигурацию плагина на нужной стадии, или, возможно, есть способ добавить файл в config / initializer для выполнения этой работы , Не уверен, как лучше пойти об этом, хотя.

Ответы [ 3 ]

1 голос
/ 15 сентября 2010

Вы уверены, что хотите распространять это как плагин, а не как драгоценный камень? Если вы упаковали свой движок в качестве гема, вы можете указать зависимости гемов как часть процесса сборки гема. Например, если вы используете Jeweler для создания своего драгоценного камня, вы просто добавляете одну строку:

s.add_dependency 'authlogic'

Когда ваш гем будет установлен, он убедится, что все зависимости установлены. Google 'ювелирная зависимость от драгоценностей' для полного примера конфигурации ювелира.

Кроме того, я много работал над своим собственным движком rails и недавно извлек много полезных базовых функций. Это может быть полезно для других проблем с двигателем:

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

1 голос
/ 21 июля 2009

Я бы пошел с маршрутом config / initializers. Это стандартная папка для установки специфичного для плагина кода конфигурации, и она будет загружена в нужное время.

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

Далее я бы создал генератор с плагином, который бы автоматически создавал файл конфигурации в config / initializer, используя:

./script/generate plugin MyPlugin --with-generator

Наконец, я бы поместил что-то в install.rb моего плагина, чтобы запустить скрипт генератора, когда плагин установлен. Таким образом, файл конфигурации генерируется автоматически при установке, и у пользователя все еще есть простой способ восстановления, если он хочет восстановить конфигурацию по умолчанию.

0 голосов
/ 13 января 2010

Вы можете легко добавить эту строку в init.rb (в вашем каталоге плагинов)

config.gem 'quick_magick'

Я попробовал его с рельсами 2.3.5, и он работал как по волшебству.

...