Лучший способ требовать Haml на двигателях Rails3 - PullRequest
7 голосов
/ 16 февраля 2011

Я разрабатываю приложение движка Rails3 и хочу использовать Haml для представлений.

Сначала я добавил это в движок Gemfile:

gem "haml"

Пока я тестировал свой движок, он работал нормально (я использовал https://github.com/josevalim/enginex для генерации драгоценного камня и проверки его с помощью фиктивного приложения).

Мои проблемы начались, когда я попытался использовать движок в реальном приложении Rails. Приложение не имеет гем "haml" в своем собственном Gemfile, и поэтому оно не инициализировало Haml, поэтому я получал шаблон "not found error", так как он не искал представления .haml. Я думал, что, потребовав Haml для Engine, потребовалось бы, чтобы он также требовался приложением Rails.

На данный момент я добавил в движок файл config / initializers / haml.rb с таким кодом:

require 'haml'
Haml.init_rails(binding)

Сейчас это работает, но мне интересно, действительно ли это хороший способ сделать это. Почему Rails не вызывает Haml-файл «init.rb» и поэтому правильно инициализирует Haml, просто добавляя гем «haml» в движок Gemfile?

Ответы [ 2 ]

19 голосов
/ 04 августа 2011

Две вещи необходимы.Сначала в .gemspec:

s.add_dependency 'haml', ['>= 3.0.0']

И в вашем lib / gem_name.rb:

require 'haml'

А затем запустите bundle в каталогах gem и app.

6 голосов
/ 16 февраля 2011

Я думаю, вам нужно будет добавить haml в gemspec движка в качестве зависимости, чтобы упаковщик мог установить haml в целевом приложении (и отобразить его в своем Gemfile.lock).Примерно так:

Gem::Specification.new do |s|
  s.add_dependency(%q<haml>, [">= 0"])
end

Я только что проверил это на одном из моих двигателей.Без зависимости в .gemspec он не устанавливал haml в целевом приложении (не отображался в Gemfile.lock).После того, как я добавил haml в gemspec в качестве зависимости, он действительно отображается:

PATH
  remote: /rails_plugins/mine/my_engine
  specs:
    my_engine (0.0.0)
      formtastic
      haml
      inherited_resources
      settingslogic
      sqlite3-ruby

GEM
  remote: http://rubygems.org/
  specs:
    #................
    haml (3.0.25)
    #................

Если вы используете jeweler, он автоматически добавит зависимости в gemspec в зависимости от того, что находится в вашем Gemfile.даже добавляет development_dependency, если у вас есть группа, определенная в вашем Gemfile.Я только кратко посмотрел на enginex, поэтому не знаю, есть ли у него аналогичная задача rake для создания gemspec.

Это может помочь прояснить некоторые вещи:

http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

...