Как использовать хамл с герою? - PullRequest
5 голосов
/ 01 марта 2009

Я пытаюсь заставить хамл работать без гема с помощью sinatra (насколько я знаю, Heroku не позволяет устанавливать гем)

Что я сделал до сих пор:

  • клонировать репозиторий haml git внутри моего проекта

  • добавить: требовать 'haml / lib / haml.rb' в мой основной файл sinatra

следующие работы:

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

но следующее не делает:

get '/test2' do
  haml :my_template
end

Я получаю ошибку:

NoMethodError - неопределенный метод each' for nil:NilClass (haml):20:in render '

. / Haml / lib / haml / engine.rb: 152: в `render '

. / Haml / lib / haml / engine.rb: 152: в `instance_eval '

. / Haml / lib / haml / engine.rb: 152: в `render ' ...

Есть ли другие файлы, которые требуется? Есть идеи?

Ответы [ 3 ]

11 голосов
/ 25 июля 2009

Heroku поддерживает установку драгоценных камней, создав файл .gems в корневом каталоге вашего проекта и добавив его в Git. При следующем нажатии на них будут установлены требуемые драгоценные камни. Для установки Haml файл должен содержать следующую строку:

haml --version '>= 2.2.0'

Более подробную информацию можно найти здесь: http://docs.heroku.com/gems

2 голосов
/ 28 октября 2012

Как указал StuFF mc, в ответ на ответ petergassner правильный способ сделать это сейчас - использовать Gemfile вашего приложения. В этом Gemfile вы бы сделали

gem "haml", ">= 2.2.0"

Heroku знает, когда вы нажимаете на свое приложение, чтобы установить камни, упомянутые в вашем файле gemfile.

Обратите внимание, что если вы хотите использовать sass, а также haml, вам, возможно, придется прыгнуть через пару обручей, чтобы настроить это. Традиционный способ работы haml заключался в записи скомпилированных файлов css на диск, что является проблемой для файловой системы heroku только для чтения. Кто-то в конце концов написал плагин / гем для решения этой ситуации (sass-on-herku или что-то подобное).

В настоящее время гем 1011 *, кажется, позаботится об этом, используя конвейер ресурсов, но если вы используете Синатру, это, скорее всего, не сработает для вас. Итак, вы либо захотите посмотреть, работает ли один из этих драгоценных камней, либо прислушаетесь к совету, что heroku, похоже, в настоящее время поддерживает . Эта статья также специфична для рельсов, но вы должны быть в состоянии заставить вещи работать должным образом для Синатры без особых затруднений. (По сути, если подвести итог, то heroku теперь поддерживает запись в каталог tmp, поэтому, пока вы можете настроить как sass gem, так и приложение Sinatra для использования некоторого местоположения tmp, вам следует подойти.)

2 голосов
/ 02 марта 2009

Две наиболее очевидные возможности (в порядке вероятности):

  1. В коде Ruby в вашем файле Haml есть ошибка. Если вы можете попробовать тот же код за пределами Sinatra, он будет отображаться нормально?
  2. Файл my_template.haml либо отсутствует, либо имеет неправильное имя.
...