Comment utiliser haml avec heroku?
Question
J'essaie de faire fonctionner HML sans la gemme avec Sinatra (Heroku n'autorise pas l'installation de gem, pour autant que je sache)
Ce que j'ai fait jusqu'à présent:
-
clonez le repo hait git dans mon projet
-
add: nécessite "haml / lib / haml.rb" dans mon fichier principal sinatra
les travaux suivants:
get '/test' do
Haml::Engine.new('%p test').render
end
mais ce qui suit ne le fait pas:
get '/test2' do
haml :my_template
end
je reçois le message d'erreur:
NoMethodError - Méthode non définie each 'pour nil: NilClass
(haml): 20: dans
render '
./ haml / lib / haml / engine.rb: 152: dans `render '
./ haml / lib / haml / engine.rb: 152: dans `instance_eval '
./ haml / lib / haml / engine.rb: 152: dans `render ' ...
Y a-t-il d'autres fichiers à exiger? Des idées?
La solution
Heroku prend en charge l’installation de gems en créant un fichier .gems
dans le répertoire racine de votre projet et en l’ajoutant à Git. Lors de votre prochaine poussée, les gemmes requises seront installées. Pour installer Haml, le fichier contiendrait cette ligne:
haml --version '>= 2.2.0'
Pour plus d'informations, cliquez ici: http://docs.heroku.com/gems
Autres conseils
Les deux possibilités les plus évidentes (par ordre de probabilité):
- Il y a une erreur dans certains codes Ruby dans votre fichier Haml. Si vous pouvez essayer le même code en dehors de Sinatra, est-ce que le rendu est correct?
- Le fichier my_template.haml n'est pas présent ou nommé de manière incorrecte.
Comme StuFF mc l'a indiqué, en réponse à la réponse de Petergassner, la bonne façon de procéder consiste à utiliser le fichier Gemfile de votre application. Dans ce Gemfile, vous feriez
gem "haml", ">= 2.2.0"
Heroku sait quand vous poussez votre application pour installer les gemmes mentionnées dans votre fichier gem.
Notez que si vous souhaitez utiliser sass
ainsi que haml
, vous devrez peut-être passer en revue quelques étapes pour obtenir cette configuration. La façon dont haml
fonctionnait de manière traditionnelle impliquait d'écrire les fichiers css
compilés sur le disque, ce qui posait un problème pour le système de fichiers en lecture seule de heroku. Quelqu'un a finalement écrit un plugin / un joyau pour résoudre cette situation (sass-on-herku ou autre).
Actuellement, la gem haml-rails
semble résoudre ce problème à l'aide du pipeline d'actifs, mais si vous utilisez Sinatra, cela ne fonctionnera probablement pas pour vous. Vous voudrez donc savoir si l’un de ces joyaux est toujours opérationnel ou prendre note de l’avis que heroku semble épousez actuellement . Cet article est également spécifique aux rails, mais vous devriez pouvoir faire fonctionner les choses correctement pour Sinatra sans trop de difficulté. (Fondamentalement, pour résumer le point ici, heroku prend désormais en charge l'écriture dans un répertoire tmp, aussi longtemps que vous pouvez configurer le sass gem et l'application Sinatra pour qu'ils utilisent un emplacement tmp pour cela, vous devriez être bon.)