Pracuję nad strumieniowym pobieraniem (CSV) z Rails 3.2 i napotykam na problem z początkową prośbą o stronę, która trwa długo. Poniższy kod ilustruje kontroler mój problem:Rails 3.2 streaming
self.response_body = Enumerator.new do |y|
10_000_000.times do
y << "Hello World"
end
end
z powyższym, odpowiedź wydaje się jak jego streamingu (z serwera niż można go obsługiwać ... Unicorn, w moim przypadku). To powiedziawszy, zanim zacznie streamować, wisi na znacznie dłużej, niż bym chciał. Jeśli zmienię go do dalszej zaczyna znacznie szybciej:
self.response_body = Enumerator.new do |y|
1000.times do
y << "Hello World"
end
end
Rozumiem, że odpowiedź powinna rozpocząć się w pierwszej iteracji pętli, ale wydaje się większe pętle powodują, że początkowy czas ładowania, aby wydłużyć . Jeśli każda iteracja jest wyprowadzana tak, jak to się dzieje, czy nie powinno to potrwać tyle samo czasu, aby rozpocząć proces przesyłania strumieniowego, niezależnie od tego, ile będzie całkowitych iteracji?
Dzięki za wszelkie informacje, które możesz mieć!
EDIT:
Oto wyjaśnienie techniki Ja próbuje. Może ja źle interpretują lub brakujące krok ?: http://facebook.stackoverflow.com/questions/3507594/ruby-on-rails-3-streaming-data-through-rails-to-client/4320399#4320399
EDIT:
myślę Rack-Cache może być przyczyną mojego problemu ... Mogę go wyłączyć na indywidualne zamówienie?
EDIT i rozwiązany:
myliłem o Rack-cache. Potrzebowałem tylko dodać self.response.headers['Last-Modified'] = Time.now.ctime.to_s
do mojej odpowiedzi.
ja nie rozumiem. Kod tworzy jeden moduł wyliczający z innego modułu wyliczającego i przypisuje zmienną response_body. Rzeczy po prawej będą wykonywane najpierw (chyba że masz jakieś magiczne metafory) i potrwają dłużej, im większy numer, który umieścisz. Potrzebujesz czegoś więcej do streamowania, ale sam nie mam sugestii. – froderik
Prawdopodobnie już wyewidencjonowałeś http://api.rubyonrails.org/classes/ActionController/Streaming.html – froderik
Zobacz link dodany powyżej dla wyjaśnienia techniki. –