Как использовать Haml с Heroku?
Вопрос
Я пытаюсь заставить Haml работать без драгоценного камня с помощью 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
оказывать'
./haml/lib/haml/engine.rb:152:в `рендеринге'
./haml/lib/haml/engine.rb:152:в `instance_eval'
./haml/lib/haml/engine.rb:152:in `render '...
Требуются ли еще какие-нибудь файлы?Есть идеи ?
Решение
Heroku поддерживает установку драгоценных камней, создавая .gems
файл в корневом каталоге вашего проекта и добавьте его в Git.При следующем нажатии необходимые драгоценные камни будут установлены.Для установки Haml файл должен содержать следующую строку:
haml --version '>= 2.2.0'
Более подробную информацию можно найти здесь: http://docs.heroku.com/gems
Другие советы
Две наиболее очевидные возможности (в порядке вероятности):
- В каком-то коде Ruby в вашем файле Haml есть ошибка.Если вы можете попробовать тот же код за пределами Синатры, будет ли он там отображаться нормально?
- Файл my_template.haml либо отсутствует, либо имеет неправильное имя.
Как указал StuFF mc в ответ на ответ Петергасснера, правильный способ сделать это сейчас — использовать Gemfile вашего приложения.В этом Gemfile вы бы сделали
gem "haml", ">= 2.2.0"
Heroku знает, когда вы нажимаете свое приложение на установку драгоценных камней, упомянутых в вашем драгоценном файле.
Обратите внимание: если вы хотите использовать sass
а также haml
, вам, возможно, придется преодолеть пару препятствий, чтобы настроить эту настройку.Путь haml
Раньше работа традиционно включала в себя написание скомпилированного css
файлы на диск, что является проблемой в файловой системе Heroku, доступной только для чтения.Кто-то в конце концов написал плагин/гем для решения этой ситуации (sass-on-herku или что-то в этом роде).
В настоящее время haml-rails
Кажется, что драгоценный камень позаботится об этом с помощью конвейера ресурсов, но если вы используете Sinatra, это, вероятно, вам не подойдет.Итак, вы либо захотите посмотреть, работает ли еще один из этих драгоценных камней, либо прислушайтесь к совету, который, похоже, дает Heroku. в настоящее время поддерживаю.Эта статья также посвящена Rails, но вы сможете без особых трудностей заставить все работать должным образом для Sinatra.(По сути, если подвести итог, то Heroku теперь поддерживает запись в каталог tmp, поэтому, если вы можете настроить как гем sass, так и приложение Sinatra на использование для этого некоторого местоположения tmp, у вас все будет хорошо.)