我尝试让 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

其他提示

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

  1. Haml 文件中的某些 Ruby 代码存在错误。如果您可以在 Sinatra 之外尝试相同的代码,它在那里渲染正常吗?
  2. 文件 my_template.haml 不存在或名称不正确。

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

gem "haml", ">= 2.2.0"

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

请注意,如果您想使用 sasshaml, ,您可能需要跳过几个环节才能完成该设置。道路 haml 过去的工作传统上涉及编写已编译的 css 文件到磁盘,这是 heroku 只读文件系统上的一个问题。最终有人编写了一个插件/gem 来解决这种情况(sass-on-herku 或类似的)。

目前, haml-rails gem 似乎使用资产管道来处理这个问题,但如果您使用 Sinatra,这可能不适合您。因此,您要么想看看其中一个宝石是否仍在运行,要么采纳 heroku 似乎的建议 目前正在拥护. 。本文也是针对 Rails 的,但是您应该能够让 Sinatra 正常工作,而不会有太大困难。(基本上,总结一下这里的要点,heroku 现在支持写入 tmp 目录,因此只要您可以配置 sass gem 和 Sinatra 应用程序以使用某些 tmp 位置来执行此操作,您应该就可以了。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top