Domanda

Cerco di far funzionare l'haml senza la gemma con Sinatra (Heroku non consente l'installazione della gemma, per quanto ne so)

Quello che ho fatto finora:

  • clona il repository haml git all'interno del mio progetto

  • aggiungi: richiede 'haml / lib / haml.rb' nel mio file principale sinatra

le seguenti opere:

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

ma non segue:

get '/test2' do
  haml :my_template
end

Ottengo l'errore:

NoMethodError - metodo non definito ciascuno 'per zero: NilClass (Haml): 20: in rendere '

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

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

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

Ci sono altri file da richiedere? Qualche idea?

È stato utile?

Soluzione

Heroku supporta l'installazione di gemme creando un file .gems nella directory principale del progetto e aggiungendolo a Git. Alla tua prossima spinta verranno installate le gemme richieste. Per installare Haml il file dovrebbe contenere questa riga:

haml --version '>= 2.2.0'

Ulteriori informazioni sono disponibili qui: http://docs.heroku.com/gems

Altri suggerimenti

Le due possibilità più ovvie (in ordine di probabilità):

  1. Si è verificato un errore in alcuni codici Ruby nel file Haml. Se riesci a provare lo stesso codice al di fuori di Sinatra, rende OK lì?
  2. Il file my_template.haml non è presente oppure è stato erroneamente denominato.

Come ha indicato StuFF mc, in risposta alla risposta del petergassner, il modo corretto per farlo ora è usare il Gemfile della tua app. In quel Gemfile lo faresti

gem "haml", ">= 2.2.0"

Heroku sa quando spingi la tua app per installare le gemme menzionate nel tuo gemfile.

Nota che se vuoi usare sass e haml , potresti aver bisogno di saltare un paio di cerchi per ottenere quella configurazione. Il modo in cui haml funzionava tradizionalmente implicava la scrittura su disco dei file css compilati, il che è un problema nel filesystem di sola lettura di heroku. Qualcuno alla fine ha scritto un plugin / gem per risolvere questa situazione (sass-on-herku o qualcosa del genere).

Attualmente, la gemma haml-rails sembra occuparsene usando la pipeline delle risorse, ma se stai usando Sinatra, probabilmente non funzionerà per te. Quindi, vorrai vedere se una di quelle gemme è ancora in funzione, o prendere il consiglio che heroku sembra attualmente si sta sposando . Questo articolo è anche specifico per le rotaie, ma dovresti riuscire a far funzionare le cose in modo appropriato per Sinatra senza troppe difficoltà. (Fondamentalmente, per riassumere il punto qui, heroku ora supporta la scrittura in una directory tmp, quindi finché puoi configurare sia la gemma sass che l'app Sinatra per usare una posizione tmp per questo, dovresti essere buono.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top