ruby on rails - for - La mejor manera de requerir motores Haml on Rails3
rails slim for (2)
Estoy desarrollando una aplicación de motor Rails3, y quiero usar Haml para las vistas.
Primero, lo que hice fue agregar esto al archivo Gem del motor:
gem "haml"
Mientras probaba mi motor, funcionaba bien (he usado https://github.com/josevalim/enginex para generar la gema y probarla con la aplicación ficticia).
Mis problemas comenzaron cuando intenté usar el motor en una aplicación real de Rails. La aplicación no tiene gem "haml" en su propio Gemfile, por lo que no estaba inicializando Haml, por lo que recibía errores de plantilla no encontrada ya que no estaba buscando las vistas .haml. Estaba pensando que al requerir Haml on the Engine sería suficiente que la aplicación Rails también lo requiriera.
Lo que he hecho por ahora fue agregar una configuración / inicializadores / haml.rb en el motor con este código:
require ''haml''
Haml.init_rails(binding)
Está funcionando ahora, pero me pregunto si realmente es una buena manera de hacerlo. ¿Por qué Rails no está llamando al archivo Haml "init.rb" y por lo tanto inicializando Haml correctamente simplemente agregando gem "haml" al archivo Gemfile del motor?
Creo que tendrás que poner haml en el motor gemspec como una dependencia para que bundler instale haml en la aplicación de destino (y aparezca en su archivo Gemfile.lock). Algo como esto:
Gem::Specification.new do |s|
s.add_dependency(%q<haml>, [">= 0"])
end
Acabo de probar esto en uno de mis motores. Sin la dependencia en .gemspec, no instaló haml en la aplicación de destino (no apareció en Gemfile.lock). Después de agregar haml a gemspec como una dependencia, aparece:
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)
#................
Si está utilizando joyero, agregará las dependencias a gemspec automáticamente en función de lo que está en su Gemfile ... incluso agrega una developement_dependency si tiene el grupo definido en su Gemfile. Solo he mirado brevemente el motorx, por lo que no sé si tiene una tarea de rastrillo similar para construir el gemspec.
Esto podría ayudar a aclarar algunas cosas:
http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
Dos cosas son necesarias. Primero, en .gemspec:
s.add_dependency ''haml'', [''>= 3.0.0'']
Y en tu lib / gem_name.rb:
require ''haml''
Y luego ejecute el bundle
dentro de los directorios de gemas y aplicaciones.