2011-10-14 9 views
13

HAMLで前処理されたクライアントサイドテンプレートを提供したいと思います。私はhaml_assets gemを使用してみましたし、初期化子に次のコードを追加していますRailsアセットパイプラインにHAMLを追加する

Rails.application.assets.register_engine ".haml", Tilt::HamlTemplate 

どちらの方法でも生HAMLを提供し、私が資産にアクセスするときにHAMLをコンパイルされません。 HAMLをパイプラインに追加するにはどうしたらいいですか?

純粋HAMLとして返さ
%tr 
    %th 
    %a.action.link.show 
    %td 
    %td 

を:私が持っている同じアプローチを使用して

答えて

0

。しかし、

%tr 
    %th 
    %a.action.link.show 
    %td cell 2 
    %td cell 3 

は、htmlチャンクとして機能しました。だから私はこれがハムの宝石であると思う。あなたはこのようなものでHAML変換を強制することができます。

%tr 
    %th 
    %a.action.link.show 
    %td &nbsp 
    %td &nbsp 

これは私の作品

5

...それがお役に立てば幸い:これはhttp://127.0.0.1:3000/assets/test.html.haml

Rails.application.assetsのために働く

# app/assets/javascripts/test.html.haml 

%p hello 

# config/initializers/haml_template.rb 

Rails.application.assets.register_mime_type 'text/html', '.html' 
Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate 

はAですSprockets::Environment

APIリファレンスについてはこちらをご覧ください:

+0

これは私のdevの環境の中で私のためダンディに動作しますが、私は生産にそれを押すと、私は」:

資産務めHAMLは、プリコンパイル後に機能するために

は、我々はまた、application.rbに次の行を必要とまだ生ハムを得ています。今のところ掘り下げているが、誰かが手がかりを持っていれば、私はずっと義務づけられているだろう。 –

+0

私の開発環境で動作していない、あなたは私に助けを与えることができますか? .html.hamlまたは.htmlファイルに直接アクセスすると、htmlとしてではなく文字列として扱われます。 – felipeclopes

12

を私は少し刺激性の現在の答えを見つけることからだけで、物事をクリアする(ただし、正しい方向に私を導きました)

イニシャライザファイルに次の行がある場合は動作します。

# config/initializers/haml_assets.rb 
Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate 

例えば、資産フォルダにあなたのHAMLファイルを投げる:

# app/assets/templates 

ないはしかしhaml_assetの宝石を使用しています!

+0

これはRails 3.2.13では動作しません。編集:おそらくそれは動作し、私はちょうど再コンパイルを強制的にテンプレートを変更する必要がありますか? user2470396の答えにも同じことが必要でした。私は、ファイルを修正した後 – Ibrahim

+0

ええ、私はこの1つが機能しなかった後application.rbの修正を試みたものの、それは、働いていたが、私は、他の回答からすべてを元に戻すと、それはまだ働いています。 – Ibrahim

10

application.rbに以下のコードは、Railsの3.2(開発中とプリコンパイル後の生産の両方)に私の作品:

require 'haml' 

config.assets.paths << Rails.root.join("app", "assets", "templates") 

class HamlTemplate < Tilt::HamlTemplate 
    def prepare 
    @options = @options.merge :format => :html5 
    super 
    end 
end 

config.before_initialize do |app| 
    require 'sprockets' 
    Sprockets::Engines #force autoloading 
    Sprockets.register_engine '.haml', HamlTemplate 
end 

これはアプリ/資産/テンプレートであなたにテンプレートを置くことができます接尾辞.html.hamlという名前が付いています(そこに.htmlが必要です。そうでなければ、.htmファイルはプリコンパイルプロセスで.htmlの代わりに生成されます)。

+0

これは私のために働いた唯一のものでした。 –

+1

私のために働いたこともあります。注意:あなたのHAMLテンプレートが未処理のHAMLとしてレンダリングされている場合は、少し変更してリロードしてください。 Railsは、たとえdevであっても、資産をキャッシュすることについてかなり積極的だと思われます。 – Micah

0

これまでの回答のうち2つは、完全な解決策が得られる前に組み合わせる必要がありました。

# config/initializers/haml_assets.rb 
Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate 

をしかし、その後、任意のプリコンパイルに失敗します。

次の行には、開発中で動作します。

require 'haml' 

config.assets.paths << Rails.root.join("app", "assets", "templates") 

class HamlTemplate < Tilt::HamlTemplate 
    def prepare 
    @options = @options.merge :format => :html5 
    super 
    end 
end 

config.before_initialize do |app| 
    require 'sprockets' 
    Sprockets::Engines #force autoloading 
    Sprockets.register_engine '.haml', HamlTemplate 
end 
関連する問題