5

私はsinatraでgemなしでhamlを動作させようとしています(私が知る限り、Herokuはgemのインストールを許可していません)

私がこれまでに行ったこと:

  • プロジェクト内で haml git リポジトリのクローンを作成します

  • 追加: 私のsinatraメインファイルにrequire '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:inrender'

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

2

最も明白な 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 をインストールするタイミングを認識しています。

sassと同様に使用したい場合はhaml、その設定を行うためにいくつかのフープをジャンプする必要がある場合があることに注意してください。従来の作業方法でhamlは、コンパイルされたcssファイルをディスクに書き込む必要がありました。これは、heroku の読み取り専用ファイルシステムの問題です。最終的に、誰かがこの状況を解決するプラグイン/gem を作成しました (sass-on-herku など)。

現在、haml-railsgem はアセット パイプラインを使用してこれを処理しているようですが、Sinatra を使用している場合、これはうまくいかない可能性があります。そのため、これらの gem の 1 つがまだ動作しているかどうかを確認するか、heroku が現在支持していると思われるアドバイスを受ける必要があります。この記事も Rails に特化していますが、Sinatra で問題なく適切に機能させることができるはずです。(基本的に、ここで要点を要約すると、heroku は tmp ディレクトリへの書き込みをサポートするようになったため、sass gem と Sinatra アプリの両方で tmp の場所を使用するように構成できる限り、問題はありません。)

于 2012-10-28T18:45:13.763 に答える