5

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

到目前为止我所做的:

  • 在我的项目中克隆haml git repo

  • 添加:需要 '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:in `render'

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

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

还有其他文件需要吗?有任何想法吗 ?

4

3 回答 3

11

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

haml --version '>= 2.2.0'

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

于 2009-07-25T13:23:28.813 回答
2

两个最明显的可能性(按概率排列):

  1. 您的 Haml 文件中的某些 Ruby 代码存在错误。如果您可以在 Sinatra 之外尝试相同的代码,那里的渲染是否正常?
  2. 文件 my_template.haml 不存在或命名不正确。
于 2009-03-01T21:30:37.023 回答
2

正如 StuFF mc 所指出的,作为对 petergassner 的回答,现在执行此操作的正确方法是使用您的应用程序的 Gemfile。在那个 Gemfile 你会做

gem "haml", ">= 2.2.0"

Heroku 知道您何时推送应用程序以安装 gemfile 中提到的 gem。

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

目前,haml-railsgem 似乎使用资产管道来解决这个问题,但如果您使用的是 Sinatra,这可能对您不起作用。因此,您要么想看看其中一个宝石是否仍在运行,要么接受 heroku目前似乎支持的建议。这篇文章也是特定于 Rails 的,但是您应该能够让 Sinatra 正常工作而没有太多困难。(基本上,在这里总结一下,heroku 现在确实支持写入 tmp 目录,所以只要你可以配置 sass gem 和 Sinatra 应用程序来使用一些 tmp 位置,你应该很好。)

于 2012-10-28T18:45:13.763 回答