Response.body speichern

Hallo,

ich komme mit dem response.body nicht weiter. Weiß jemand wie ich den
response.body bzw. dessen stream speichern kann?

Bis rails 2.0.2 hat das funktioniert:

File.open(path, “wb+”) { |f| f.write(response.body) }

Aber jetzt, seit rails 2.1.0, ist wohl response.body ein Stream. Und
denn will
ich speichern.

Hat jemand eine Idee?

Viele Grüße

Michael K.

Gut, daß wir drüber geredet haben. Ich habe die Antwort jetzt selbst
gefunden.
Vielleicht ist das ja für den einen oder anderen Hilfreich, der
generierte
Dokumente cachen will. Ich wurde ja schon mal drauf hingewiesen, daß es
sich bei
response.body um ein Proc-Objekt handelt. Nur habe ich nicht
verstanden, was
ich damit anfangen soll. Anyway, so speichert man den response.body ab:

File.open(path, “wb+”) { |f|
response.body.call(response, f)
}

Michael K. schrieb:

2008/6/4 Michael K. [email protected]:

Gut, daß wir drüber geredet haben. Ich habe die Antwort jetzt selbst
gefunden. Vielleicht ist das ja für den einen oder anderen Hilfreich, der
generierte Dokumente cachen will. Ich wurde ja schon mal drauf hingewiesen,
daß es sich bei response.body um ein Proc-Objekt handelt. Nur habe ich
nicht verstanden, was ich damit anfangen soll. Anyway, so speichert man den
response.body ab:

File.open(path, “wb+”) { |f|
response.body.call(response, f)
}

Wenn ich das richtig verstanden habe, schreibst Du doch die
generierten PDFs sowieso ins Filesystem, oder etwa nicht? Wenn doch,
dann braucht doch auch nichts irgendwie gegached zu werden, denn der
Frontend-Webserver/Proxy (vor allem nginx) sollte die Files direkt
ausliefern, ohne jemals auch nur den Rails-Appserver anzusprechen.

Andreas

Hallo Andreas,

das Dokument wird per RTeX ausgeliefert. D.h. bei jedem Abruf wird das
Dokument
neu generiert. Da landet erstmal nichts im Filesystem.

Mit cachen meine ich, daß ich ein statisches Dokument ablege, das der
Apache
dann ausliefern kann. Aber damit ich es ablegen kann, muß ich erstmal an
das
generierte Dokument drankommen. Deshalb das abspeichern des
response.body.

Wenn’s einen einfacheren Weg gibt, rtex-Dokumente auf dem Server
abzulegen, bin
ich immer dafür zu haben.

Viele
Grüße
Michael K.

Andreas R. schrieb:

Hallo Michael,

wenn ich das richtig überblicke, dann ruft RTeX die send_file-Mehtode
auf. Ich
kann zwar Optionen an RTeX übergeben, aber keine, die an send_file
weitergegeben
werden.

Ich habe jedenfalls noch keine Möglichkeit gesehen, wie das gehen
sollte.

Viele Grüße

Michael K.

Michael S. schrieb:

On Wednesday 04 June 2008, Michael K. wrote:

Gut, daß wir drüber geredet haben. Ich habe die Antwort jetzt selbst
gefunden. Vielleicht ist das ja für den einen oder anderen Hilfreich,
der generierte Dokumente cachen will. Ich wurde ja schon mal drauf
hingewiesen, daß es sich bei response.body um ein Proc-Objekt
handelt.

Wie sendest du die Daten denn? Setze bei send_data oder send_file mal
die Option :stream => false. Dann bekommst du in response.body einen
String, kein Proc.

Michael