Подтвердить что ты не робот

Добавление HAML в конвейер Rails

Я хотел бы обслуживать шаблоны клиентских сторон, которые были предварительно обработаны через HAML. Я попытался использовать haml_assets gem и добавив следующий код в инициализатор:

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

Оба эти метода обслуживают сырую HAML и не скомпилировали HAML, когда я обращаюсь к активу. Как добавить HAML в конвейер?

4b9b3361

Ответ 1

Просто, чтобы прояснить ситуацию, так как я нахожу, что текущие ответы немного раздражают (хотя и привели меня в нужное русло)

Он работает, если у меня есть эта строка в файле инициализации:

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

Бросьте файлы haml в папку с ресурсами, например:

# app/assets/templates   

Не используйте камень haml_asset, хотя!

Ответ 2

Следующий код в 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

Это позволяет вам размещать шаблоны в app/assets/templates с именем suffix.html.haml(вам нужен .html, или .htm файлы генерируются вместо .html в процессе предварительной компиляции).

Ответ 3

Это работает для меня:

# 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

Это работает для http://127.0.0.1:3000/assets/test.html.haml

Rails.application.assets является Sprockets::Environment.

См. здесь ссылку на API:

Ответ 4

Используя тот же подход, у меня есть:

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

вернулся как чистый хамл. Но

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

служил html chunk. Поэтому я думаю, что это что-то с haml gem. Вы можете принудительно преобразовать haml с чем-то вроде этого:

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

Надеюсь, что это поможет...

Ответ 5

Два предыдущих ответа здесь должны были быть объединены до того, как мы получим полное решение.

В разработке работает следующая строка:

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

Но затем сбой не выполняется при любом прекомпиле.

Для обслуживаемого хамлом работы после прекомпиляции нам также нужны эти строки в application.rb:

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

Ответ 6

Со звездочками 3 и 4

# in /config/initializers/haml.rb
Rails.application.config.assets.configure do |env|
 env.register_mime_type "text/haml", extensions: %w(.haml .html.haml)
 env.register_transformer 'text/haml', Tilt::HamlTemplate.default_mime_type, Tilt::HamlTemplate
end