Ruby 如何与heroku一起使用haml?

Ruby 如何与heroku一起使用haml?,ruby,sinatra,heroku,haml,gem,Ruby,Sinatra,Heroku,Haml,Gem,我试图让haml在没有使用sinatra的gem的情况下工作(据我所知,Heroku不允许安装gem) 到目前为止我所做的: 在我的项目中克隆haml git回购协议 添加:在我的sinatra主文件中需要'haml/lib/haml.rb' 以下工作: get '/test' do Haml::Engine.new('%p test').render end 但以下情况并非如此: get '/test2' do haml :my_template end 我得到一个错误: No

我试图让haml在没有使用sinatra的gem的情况下工作(据我所知,Heroku不允许安装gem)

到目前为止我所做的:

  • 在我的项目中克隆haml git回购协议

  • 添加:在我的sinatra主文件中需要'haml/lib/haml.rb'

以下工作:

get '/test' do
  Haml::Engine.new('%p test').render
end
但以下情况并非如此:

get '/test2' do
  haml :my_template
end
我得到一个错误:

NoMethodError-对于nil:NilClass,未定义的方法
each'
(haml):20:in
render'

./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'

是否需要其他文件?
有什么想法吗?

两种最明显的可能性(按概率排序):

  • Haml文件中的某些Ruby代码出错。如果您可以在Sinatra之外尝试相同的代码,那么它在那里呈现OK吗
  • 文件my_template.haml不存在或名称不正确

  • Heroku支持通过在项目的根目录中创建
    .gems
    文件并将其添加到Git来安装gems。下一次推送时,将安装中所需的gems。要安装Haml,文件将包含以下行:

    haml --version '>= 2.2.0'
    

    更多信息可以在这里找到:

    正如StuFF mc在回答petergassner的回答时指出的那样,现在正确的方法是使用应用程序的GEM文件。在那个档案里你会做什么

    gem "haml", ">= 2.2.0"
    
    Heroku知道您何时推送应用程序来安装Gem文件中提到的gems

    请注意,如果您想使用
    sass
    以及
    haml
    ,您可能需要跳过几个环来进行设置。传统的
    haml
    工作方式是将编译后的
    css
    文件写入磁盘,这在heroku的只读文件系统中是一个问题。最终有人写了一个插件/gem来解决这个问题(herku上的sass或类似的东西)


    目前,
    haml-rails
    gem似乎通过资产管道解决了这一问题,但如果您使用的是Sinatra,这可能对您不起作用。所以,你要么想看看这些宝石中是否有一颗还在运行,要么就听从heroku的建议。本文也是针对rails的,但是您应该能够在不太困难的情况下让事情适合Sinatra。(基本上,总结一下这里的要点,heroku现在确实支持写入tmp目录,因此只要您可以配置sass gem和Sinatra应用程序来使用一些tmp位置,您应该会很好。)

    谢谢,我有@results.each其中@results在我的haml文件警告中为零!Bundler是管理您的宝石的最佳方式。我们建议Heroku上的所有应用程序都使用Bundler。.gems清单已弃用。@我的gemspec中有haml gem,而我的gemfile引用了我的gemspec。我检查了我的锁文件,它肯定在那里。我的日志说找不到哈姆。有什么问题吗?heroku不支持gemspecs吗?请注意,我可以使用heroku使用的默认启动命令在本地使用bundler执行它。@nterry我已经两年多没有做过任何Rails了:(恐怕我现在真的帮不上忙……我将来可能会再做一些Rails,但现在我对苹果的技术很忙。