2009-03-01 23 views
5

intento conseguir trabajo haml sin la joya con Sinatra (Heroku no permite instalar la gema, por lo que yo sé)Cómo usar haml con heroku?

lo que he hecho hasta ahora:

  • clon de la haml repositorio git dentro de mi proyecto

  • complemento: requerir

las siguientes obras 'HAML/lib/haml.rb' a mi archivo principal Sinatra:

get '/test' do 
    Haml::Engine.new('%p test').render 
end 

pero el siguiente no:

get '/test2' do 
    haml :my_template 
end 

me sale el error:

NoMethodError - método no definido each' for nil:NilClass (haml):20:in render'

./haml/lib/haml/engine .rb: 152: en 'render'

./haml/lib/haml/engine.rb:152:in `instance_eval '

./haml/lib/haml/engine.rb:152:in `render' ...

¿Hay cualquier otro archivo para requerir? Alguna idea?

Respuesta

11

Heroku admite la instalación de gemas creando un archivo .gems en el directorio raíz de su proyecto y agregándolo a Git. En tu próximo empujón se instalarán las gemas requeridas allí. Para instalar Haml el archivo contendría esta línea:

haml --version '>= 2.2.0' 

Más información se puede encontrar aquí: http://docs.heroku.com/gems

+1

** ¡ADVERTENCIA! ** Bundler es la mejor manera de administrar sus gemas. Sugerimos que todas las aplicaciones en Heroku usen Bundler. ** El manifiesto .gems está en desuso. ** –

+0

@StuFFmc Tengo la gema haml en mi gemspec y mi gemfile hace referencia a mi gemspec. Revisé mi archivo de bloqueo y definitivamente está allí. Mis registros dicen que haml no se pudo encontrar. ¿Cuál es el problema? ¿Heroku no es compatible con gemspecs? Como nota, puedo ejecutarlo con bundler localmente usando el comando de inicio predeterminado que usa heroku. – nterry

+0

@nterry No he usado ningún Rails desde hace más de 2 años :(Me temo que no puedo ayudar en este momento ... Podría hacer algunos Rails en el futuro otra vez, pero ahora estoy totalmente de acuerdo con Apple Technos ocupado. –

2

Las dos posibilidades más obvias (por orden de probabilidad):

  1. Hay un error en algún código de Ruby en su archivo Haml. Si puedes probar el mismo código fuera de Sinatra, ¿funciona bien allí?
  2. El archivo my_template.haml no está allí o no tiene un nombre correcto.
+0

gracias, tuve @ results.each donde @results es nulo en mi archivo haml –

2

como enseres mc ha indicado, en respuesta a la respuesta de petergassner, la forma correcta de hacer esto ahora es usa el Gemfile de tu aplicación. En ese Gemfile que haría

gem "haml", ">= 2.2.0" 

Heroku sabe cuando se presiona su aplicación para instalar las joyas mencionadas en su Gemfile.

Tenga en cuenta que si desea utilizar sass y haml, puede necesitar pasar por un par de aros para configurarlo. La manera en que haml solía trabajar tradicionalmente implicaba escribir en el disco los archivos compilados css, que es un problema en el sistema de archivos de solo lectura de heroku. Alguien eventualmente escribió un plugin/gema para resolver esta situación (sass-on-herku o algo así).

Actualmente, la gema haml-rails parece ocuparse de esto utilizando la cartera de activos, pero si usa Sinatra, es probable que esto no funcione para usted. Por lo tanto, o bien querrás ver si una de esas gemas aún está en funcionamiento, o bien tomar el consejo de que heroku parece currently be espousing. Este artículo también es específico de los rieles, pero debería ser capaz de hacer que las cosas funcionen correctamente para Sinatra sin demasiada dificultad. (Básicamente, para resumir el punto aquí, heroku ahora admite escribir en un directorio tmp, por lo que siempre que pueda configurar tanto la gema sass como la aplicación Sinatra para usar alguna ubicación tmp para esto, debe ser bueno)