如何将 haml 与 heroku 一起使用?
题
我尝试让 haml 在没有 gem 的情况下与 sinatra 一起工作(据我所知,Heroku 不允许安装 gem)
到目前为止我所做的:
在我的项目中克隆 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:在“渲染” ...
还需要其他文件吗?有任何想法吗 ?
解决方案
Heroku 支持通过创建一个来安装 gem .gems
在项目根目录中创建一个文件并将其添加到 Git。下次推送时,将安装其中所需的宝石。要安装 Haml,文件将包含以下行:
haml --version '>= 2.2.0'
更多信息可以在这里找到: http://docs.heroku.com/gems
其他提示
两种最明显的可能性(按概率顺序):
- Haml 文件中的某些 Ruby 代码存在错误。如果您可以在 Sinatra 之外尝试相同的代码,它在那里渲染正常吗?
- 文件 my_template.haml 不存在或名称不正确。
正如 StuFF mc 所指出的,针对 petergassner 的回答,现在执行此操作的正确方法是使用应用程序的 Gemfile。在那个 Gemfile 中你会做
gem "haml", ">= 2.2.0"
Heroku 知道您何时推送应用程序来安装 gemfile 中提到的 gem。
请注意,如果您想使用 sass
也 haml
, ,您可能需要跳过几个环节才能完成该设置。道路 haml
过去的工作传统上涉及编写已编译的 css
文件到磁盘,这是 heroku 只读文件系统上的一个问题。最终有人编写了一个插件/gem 来解决这种情况(sass-on-herku 或类似的)。
目前, haml-rails
gem 似乎使用资产管道来处理这个问题,但如果您使用 Sinatra,这可能不适合您。因此,您要么想看看其中一个宝石是否仍在运行,要么采纳 heroku 似乎的建议 目前正在拥护. 。本文也是针对 Rails 的,但是您应该能够让 Sinatra 正常工作,而不会有太大困难。(基本上,总结一下这里的要点,heroku 现在支持写入 tmp 目录,因此只要您可以配置 sass gem 和 Sinatra 应用程序以使用某些 tmp 位置来执行此操作,您应该就可以了。)