Statische und dynamische Seiten mischen

Ich möchte in einer Anwendung statische Seiten in derselben
URL-Hierarchie haben, die auch auf Rails Controller geroutet wird. Etwa
so

app/views/movies
|-- edit.html.erb
`-- _movie.html.erb
public/movies
'-- index.html

Die Absicht dahinter ist, dass in der Produktionsumgebung die statischen
Seiten direkt vom Webserver ausgeliefert werden. Aber es soll halt auch
während der Entwicklung mit Mongrel funktionieren.

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/

Hallo Michael,

Du könntest die index-Datei ins app/views/movies-Verzeichnis zu legen und
auf
auf dem Produktionsserver per Page-Caching quasi-statisch zu machen.

app/views/movies
|-- index.html.erb
|-- edit.html.erb
`-- _movie.html.erb

Eventuell könnte auch dieser Railscast weiterhelfen:

Viele
Grüße
Michael K.

Michael S. schrieb:

Hallo Michaels (sorry, could not resist ;-),

auch wenn ich mir nicht ganz sicher bin, dass ich Deine Intention,
Michael S., richtig verstanden habe, und auch wenn der Screencast von
Ryan B. zu dem Thema sehr instruktiv ist, hätte ich einen Tipp, um
das Rad nicht neu zu erfinden:

Für (semi-)statische Anwendungsteile benutze ich gerne Comatose:
http://comatose.rubyforge.org/

Das habe ich in einem Projekt schon produktiv eingesetzt. Es ist nicht
hyper-komfortabel, aber erlaubt die Gestaltung vieler Routevariationen,
ermöglicht den Aufruf von direkt gerendertem Text, also z. B. in Deinem
Fall in
app/views/movies/index.html.erb:

<%= render :comatose=>‘indices/movies’ %>

Man kann auch lokale Variablen mitgeben, mit Liquid-Drops mehr Dynamik
(allerdings ggf. auch Sicherheitslecks) hineinbringen, das Page-Cacheing
in div. Granularität steuern, und ein Flansch zur Anbindung von
restful_authentication ist auch schon gelegt.

Vielleicht hilft’s ja weiter.
Cheers
[ofi]

Hm,

plötzlich verstehe ich das Problem nicht mehr. Ich habe gerade in einem
meiner Rails-Projekte unter app/views/posts/index.html.erb in etwas
Bedeutungsloses umbenannt, und in public/posts eine index.html angelegt.
Im RAILS_ENV development dann http://localhost:3000/posts/ aufgerufen,
und es geht: Die statische Seite wird geliefert. Wenn in der statischen
Seite nun JS enthalten wäre, das die anderen Actions triggert, sollte
das doch gehen, oder was blicke ich hier nicht?
Sorry, wenn das jetzt blöd gefragt ist, aber das interessiert mich jetzt
schon.
rübekratz

Falls Du mal Zeit hast, kannst Du mir die Frage ja beantworten, so Du
magst.
Schon mal Danke und beste Grüße
[ofi]

P.S.: Meine aktuelle Rails-Version ist 2.3.2.

On Wednesday 01 April 2009, Olaf Fiedler wrote:

auch wenn ich mir nicht ganz sicher bin, dass ich Deine Intention,
Michael S., richtig verstanden habe

Der Hintergrund ist, dass ich statische Seiten habe deren dynamischer
Inhalt vollständig per AJAX als JSON geladen wird. Für beides will ich
schöne URLs haben, die sinnvoll zusammen passen.

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/

Okay,

jetzt verstehe ich: Das Problem beschränkt sich auf die index-Action.
Puh, sorry, da fällt mir jetzt auch nichts ein, was nicht bloß ein
Workaround wäre. Sollte sich das ändern bzw. ich über eine Lösung
stolpern, werde ich an Dich denken. Im Gegenzug wäre es schön, wenn Du
vor mir eine Lösung findest (was vermutlich wahrscheinlicher ist), Du
hier über diese informieren könntest.

Good luck und viel Erfolg
[ofi]

On Thursday 02 April 2009, Olaf Fiedler wrote:

Hm,

plötzlich verstehe ich das Problem nicht mehr. Ich habe gerade in
einem meiner Rails-Projekte unter app/views/posts/index.html.erb in
etwas Bedeutungsloses umbenannt, und in public/posts eine index.html
angelegt. Im RAILS_ENV development dann http://localhost:3000/posts/
aufgerufen, und es geht: Die statische Seite wird geliefert

Versuch jetzt mal auf

http://localhost:3000/posts/index.json oder

http://localhost:3000/posts mit
Accept-Header application/json,application/javascript

zuzugreifen. Du wirst feststellen, dass es nicht geht. Die Erklärung
dafür, findet sich, glaube ich, in
rails/railties/lib/rails/rack/static.rb. Jedenfalls für Mongrel; ob das
bei Passenger auch wirksam ist, habe ich noch nicht herausgefunden.

Rails::Rack::Static unterscheidet jedenfalls nicht nach gewünschtem
MIME-Type, sondern liefert immer das, was dort mit Endung HTML
herumliegt.

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/

On Monday 06 April 2009, Olaf Fiedler wrote:

Okay,

jetzt verstehe ich: Das Problem beschränkt sich auf die index-Action.
Puh, sorry, da fällt mir jetzt auch nichts ein, was nicht bloß ein
Workaround wäre. Sollte sich das ändern bzw. ich über eine Lösung
stolpern, werde ich an Dich denken. Im Gegenzug wäre es schön, wenn
Du vor mir eine Lösung findest (was vermutlich wahrscheinlicher ist),
Du hier über diese informieren könntest.

Ich verstehe inzwischen immerhin, warum es nicht einfach geht, was ich
erreichen möchte. Sowohl Rails auf Mongrel etc. mit der
Static-Middleware (siehe irgendwo in Railties) als auch Passenger
berücksichtigen den Accept-Header, also die vom Browser gewünschten
MIME-Typen, nicht, wenn sie eine passende Datei herum liegen sehen. Ich
habe bei Passenger ein entsprechendes Ticket geöffnet[*]. Falls mir
jemand erklären kann, wie ich in einem Apache2-Modul, sofern mod_mime
geladen ist, den MIME-Typ einer Datei ermitteln kann, dann schreibe ich
auch selbst einen Patch.

Michael

[*] Google Code Archive - Long-term storage for Google Code Project Hosting.

Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/