2011-09-21 11 views
12

Wygląda na to, że występuje problem z korzystaniem z przesyłania strumieniowego HTTP z projektami HAML w szynach. Działa to doskonale, jeśli zamiast tego używam ERB. Najwyraźniej nie jestem jedynym z this problem.Strumieniowanie HTTP w Railsach z HAML

Nie działa z umieszczeniem stream u góry kontrolera lub z użyciem render :stream => true w akcji.

W jaki sposób uzyskać ładowanie strumieniowe HAML i HTTP, aby ładnie grać razem?

Aktualizacja: Otworzyłem problem na stronie klejnotu, here.

+0

Przypuszczam, że to dlatego, że HAML musi renderować całą stronę, zanim będzie mógł wysłać coś do klienta - to byłby problem z projektowaniem. Nie publikuję tego jako odpowiedzi, ponieważ nie jestem pewien i nie mam czasu, aby to sprawdzić właśnie teraz. – Romain

+0

@Romain: Dzięki za twój wkład. To także moje podejrzenie, że HAML nie tłumaczy pojedynczych plików na ERB, ale faktycznie czeka, aż cały widok zostanie złożony, a następnie wyświetli HTML. Czy coś takiego. Byłby to poważny problem, teraz, gdy 3.1 jest już dostępny i dostępny jest streaming. –

+1

Czy próbowałeś sprawdzić, czy HAML i/lub Railsy już mają zgłoszenie błędu na ten temat? Wyobrażam sobie, że nie jest niemożliwe, aby naprawić HAML (pod warunkiem, że obaj mamy rację w naszym założeniu, co jest nie tak). – Romain

Odpowiedz

2

ten nie jest jeszcze obsługiwany przez haml (source):

HTTP Streaming jest rodzaj rzeczy, które wymagają znacznego zestaw modyfikacji do rdzenia silnika haml. Jest tylko umiarkowanie trudny do uzyskania, aby działał nawet w podstawowych przypadkach, ale gdy bierzesz pod uwagę rzeczy takie, jak operatorzy odżywiania białymi znakami, stają się trudniejsze. .

Nie jest to coś, czemu przeciwstawię się w teorii, ale nie jest to również coś, co znajduje się wysoko na mojej liście priorytetów, zważywszy na trudność związaną z implementacją go przez .

1

Elementy wewnętrzne Haml są takie, że faktycznie wypisują się do bufora w miarę jego przechodzenia. Jednak "standardowy" interfejs API, który Rails tradycyjnie zapewniał dla języków szablonowych, jest dość prostym połączeniem typu in-and-out. Nie sądzę, że Haml ma obecnie "wsparcie strumieniowe", ale jest to po prostu kwestia interfejsu API niż cokolwiek innego.

Jestem ciekawy, jak Railsy podłączają się do ERB, aby to zrobić.

+0

https://github.com/rails/rails/blob/master/actionpack/lib/action_view/template/handlers/erb.rb#L61 – gunn