¿Cómo usar haml con heroku?
Pregunta
Intento hacer que haml funcione sin la gema con sinatra (Heroku no permite la instalación de gemas, que yo sepa)
Lo que he hecho hasta ahora:
-
clonar el repositorio haml git dentro de mi proyecto
-
add: requiere 'haml / lib / haml.rb' a mi archivo principal de sinatra
los siguientes trabajos:
get '/test' do
Haml::Engine.new('%p test').render
end
pero lo 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:in 'render'
./haml/lib/haml/engine.rb:152:in en 'instancia_eval'
./haml/lib/haml/engine.rb:152:in 'render' ...
¿Hay otros archivos para requerir? ¿Alguna idea?
Solución
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 su próximo empuje se instalarán las gemas requeridas allí. Para instalar Haml, el archivo contendría esta línea:
haml --version '>= 2.2.0'
Puede encontrar más información aquí: http://docs.heroku.com/gems
Otros consejos
Las dos posibilidades más obvias (en orden de probabilidad):
- Hay un error en algún código Ruby en su archivo Haml. Si puede probar el mismo código fuera de Sinatra, ¿funciona bien allí?
- El archivo my_template.haml no está allí o tiene un nombre incorrecto.
Como ha indicado StuFF mc, en respuesta a la respuesta de petergassner, la forma correcta de hacerlo ahora es utilizar el Gemfile de su aplicación. En ese Gemfile harías
gem "haml", ">= 2.2.0"
Heroku sabe cuándo presionas tu aplicación para instalar las gemas mencionadas en tu gemfile.
Tenga en cuenta que si desea utilizar sass
y haml
, es posible que deba saltar un par de aros para configurarlo. La forma en que haml
solía funcionar tradicionalmente implicaba escribir los archivos compilados css
en el disco, lo cual es un problema en el sistema de archivos de solo lectura de heroku. Alguien finalmente 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 canalización de activos, pero si está utilizando Sinatra, es probable que esto no funcione para usted. Por lo tanto, querrá ver si una de esas gemas aún está en funcionamiento o tomar el consejo de que heroku parece actualmente defiende . Este artículo también es específico para los rieles, pero debería poder hacer que las cosas funcionen adecuadamente 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, debería ser bueno).