2009-03-01 99 views
5

我试图让HAML工作不与西纳特拉宝石(Heroku的不允许创业板安装,据我所知)如何将haml与heroku一起使用?

什么我迄今所做的:

  • 克隆HAML我的项目

  • 里面添加混帐回购协议:要求 'HAML/lib目录/ haml.rb' 我西纳特拉主文件

以下工作:

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:'render'

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

./haml/lib/haml/engine.rb:152:in'渲染” ...

是否有任何其他文件要求? 任何想法?

回答

11

Heroku支持通过在项目的根目录中创建.gems文件并将其添加到Git来安装gems。在你的下一次推动中将需要安装的宝石。要安装Haml的文件将包含该行:

haml --version '>= 2.2.0' 

更多信息可以在这里找到:http://docs.heroku.com/gems

+1

**警告!** Bundler是管理你的宝石的最佳方式。我们建议Heroku上的所有应用都使用Bundler。 ** .gems清单不推荐使用** – 2011-09-15 20:43:35

2

两个最明显的可能性(概率为序):

  1. 有在你Haml的文件中的一些Ruby代码错误。如果您可以在Sinatra之外尝试使用相同的代码,它会在那里呈现OK吗?
  2. 文件my_template.haml不存在或名称不正确。
+0

谢谢,我有@ results.each其中@results是零我的哈姆文件 – 2009-03-01 22:39:11

2

由于东西MC曾表示,为应对petergassner的答案,现在做到这一点,正确的方法是使用你的应用程序的Gemfile。在这种的Gemfile你会做

gem "haml", ">= 2.2.0" 

的Heroku知道什么时候你把你的应用程序安装在您的Gemfile提到的宝石。

请注意,如果您想使用sass以及haml,您可能需要跳过几个环节才能完成设置。 haml用于传统工作的方式涉及将编译的css文件写入磁盘,这是heroku的只读文件系统上的问题。有人最终写了一个插件/宝石来解决这种情况(sass-on-herku或其他)。

目前,haml-rails宝石似乎使用资产管道来处理这个问题,但如果您使用的是Sinatra,这可能对您无效。所以,你要么想看看这些宝石是否还在使用,或者听取heroku的建议currently be espousing。本文也是专门针对轨道的,但您应该能够在没有太多困难的情况下让事情适合Sinatra。 (基本上,总结一下,heroku现在支持写入tmp目录,所以只要你可以配置sass gem和Sinatra应用程序来使用这个tmp位置,你应该会很好。)

相关问题