Herokuでhamlを使用する方法は?
質問
sinatraを使用してgemなしでhamlを動作させようとしています(Herokuでは、gemのインストールは許可されていません)
これまでに行ったこと:
-
プロジェクト内でhaml gitリポジトリを複製します
-
add: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 ' ...
他に必要なファイルはありますか? どんなアイデア?
解決
Herokuは、プロジェクトのルートディレクトリに .gems
ファイルを作成してGitに追加することにより、gemsのインストールをサポートしています。次のプッシュで、そこに必要なgemがインストールされます。 Hamlをインストールするには、ファイルに次の行が含まれます。
haml --version '>= 2.2.0'
詳細については、 http://docs.heroku.com/gems をご覧ください。 p>
他のヒント
2つの最も明白な可能性(確率の順):
- HamlファイルのRubyコードにエラーがあります。 Sinatraの外部で同じコードを試すことができる場合、そこでは正常にレンダリングされますか?
- my_template.hamlファイルが存在しないか、名前が間違っています。
StuFF mcが示したように、petergassnerの答えに応じて、これを行う正しい方法は、アプリのGemfileを使用することです。そのGemfileでは、次のようにします
gem "haml", ">= 2.2.0"
Herokuは、gemfileに記載されているgemをインストールするためにアプリをプッシュするタイミングを認識しています。
sass
と haml
を使用する場合は、いくつかのフープをジャンプして設定する必要がある場合があります。従来の haml
の動作方法は、コンパイルされた css
ファイルをディスクに書き込むことでした。これは、herokuの読み取り専用ファイルシステムの問題です。最終的に誰かがこの状況を解決するプラグイン/宝石を作成しました(sass-on-herkuなど)。
現在、 haml-rails
gemはアセットパイプラインを使用してこれを処理しているようですが、Sinatraを使用している場合、これはおそらく機能しません。そのため、これらの宝石の1つがまだ動作しているかどうかを確認するか、herokuが現在支持している。この記事はレール固有のものでもありますが、Sinatraで適切に機能するようにするのにそれほど苦労する必要はありません。 (基本的に、ここでポイントを要約すると、herokuはtmpディレクトリへの書き込みをサポートするようになりました。sassgemとSinatraアプリの両方でtmpの場所を使用するように構成できる限り、これで十分です。)