Добавление HAML в конвейер Rails
Я хотел бы обслуживать шаблоны клиентских сторон, которые были предварительно обработаны через HAML. Я попытался использовать haml_assets gem и добавив следующий код в инициализатор:
Rails.application.assets.register_engine ".haml", Tilt::HamlTemplate
Оба эти метода обслуживают сырую HAML и не скомпилировали HAML, когда я обращаюсь к активу. Как добавить HAML в конвейер?
Ответы
Ответ 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  
%td  
Надеюсь, что это поможет...
Ответ 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