sintax rails for escape comment ruby-on-rails ruby-on-rails-3 haml rails-engines

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.