Problem mit Templates außerhalb des views-Verzeich nisses

Hallo,

ich versuche gerade eine Anwendung von rails 2.0.2 nach 2.1.0 zu
migrieren und
bin dabei auf ein Problem gestoßen.

In meiner Anwendung gibt es kundenspezifische Dateien, u.a. templates,
die sich
nicht unterhalb von app/views befinden, sondern - in der Regel - in
einem
Verzeichnis namens “public/resources/views”.

Der Aufruf der Seite erfolgt über

def topic

render :template => File.join(’…/…/’, Properties.views_dir,
@topic.template)
end

Properties.views_dir gibt in der Regel “public/resources/views”
und
@topic.template gibt in der Regel “index”
zurück.

Das funktioniert in Rails 2.0.2 noch sehr gut. Wenn ich die Anwendung
jedoch auf
2.1.0 migriere, dann erhalte ich diese Fehlermeldung:


ActionView::MissingTemplate (Missing template
…/…/public/resources/views/index
in view path /Users/kastner/Documents/rails_projects/ltree/app/views):

/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template.rb:85:in
`raise_missing_template_exception’

/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template.rb:78:in
`set_extension_and_file_name’


Irgendwie scheint sich die Behandlung von Pfadangaben geändert zu haben.
Aber
ich konnte dazu nirgends etwas finden.

Weiß jemand, was die Ursache des Fehlers sein könnte?

Viele Grüße

Michael K.

Hallo,

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

ich versuche gerade eine Anwendung von rails 2.0.2 nach 2.1.0 zu migrieren
und bin dabei auf ein Problem gestoßen.

In meiner Anwendung gibt es kundenspezifische Dateien, u.a. templates, die
sich nicht unterhalb von app/views befinden, sondern - in der Regel - in
einem Verzeichnis namens “public/resources/views”.

render :template => File.join(‘…/…/’, Properties.views_dir,
@topic.template)
end

Schon einmal etwas von Soft-Links gehört? Ich weiß jetzt nicht auf
welchem OS die Rails-Applikation läuft, aber es sollte selbst unter
Windows möglich sein, einen Soft-Link zu setzen.

Beispiel (unix):

Wir wollen Views aus public/resources/views/test nach app/views/test
verlinken:

cd
ln -s public/resources/views/test app/views/test

“app/views/test” darf noch nicht existieren. Somit erscheint alles aus
dem Verzeichnis public/resources/views/test im Verzeichnis
app/views/test.

Andreas

Hi Michi,

ging mir mit dem goldberg plugin auch so (wer’s verwendet sollte mein
github-repo probieren).

Der Controller gibt die mit base.append_view_path eine gute
Möglichkeit die dir vielleicht hilft.

Aber generell solltest du die views nicht im public Verzeichnis
speichern.

ciao, tom

Am 02.06.2008 um 12:25 schrieb Michael K.:

def topic
Anwendung jedoch auf 2.1.0 migriere, dann erhalte ich diese
template.rb:78:in `set_extension_and_file_name’


Irgendwie scheint sich die Behandlung von Pfadangaben geändert zu
haben. Aber ich konnte dazu nirgends etwas finden.

Weiß jemand, was die Ursache des Fehlers sein könnte?


Thomas R. “TomK32” Koll || http://tomk32.de || http://ananasblau.com
just a geek trying to change the world
Skype: TomK32 || Mail: [email protected]

Hallo Thomas,

danke für den Hinweis. Ich habe base.append_view_path für diese Anwendung nicht
ausprobiert, befürchte aber, daß rails unterbinden möchte, templates außerhalb
des views-Verzeichnisses zu setzen.

Es sind nur kundenspezifische Templates, die im Public-Verzeichnis
liegen. Das
ist, aus verschiedenen Gründen, so beabsichtigt.

Viele
Grüße
Michael K.

Thomas R. Koll schrieb:

Am 02.06.2008 um 13:34 schrieb Michael K.:

Hallo Thomas,

danke für den Hinweis. Ich habe base.append_view_path für diese
Anwendung nicht ausprobiert, befürchte aber, daß rails unterbinden
möchte, templates außerhalb des views-Verzeichnisses zu setzen.

Ne, tut es nicht. Zumindest plugin directory wird anstandslos
akzeptiert.

ciao, tom


Thomas R. “TomK32” Koll || http://tomk32.de || http://ananasblau.com
just a geek trying to change the world
Skype: TomK32 || Mail: [email protected]

Hi Michael,

danke für den Hinweis. Ich habe base.append_view_path für diese
Anwendung nicht ausprobiert, befürchte aber, daß rails unterbinden
möchte, templates außerhalb des views-Verzeichnisses zu setzen.

Es sind nur kundenspezifische Templates, die im Public-Verzeichnis
liegen. Das ist, aus verschiedenen Gründen, so beabsichtigt.

Ich habe nun das gleiche Problem. Es ist unumgänglich, dass gewisse
Views außerhalb des views-Ordners gespeichert werden.

Hast du mittlerweile eine Lösung gefunden?

MFG
Sebastian


Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

Hallo Sebastian,

ja, habe ich gefunden. Ich setze einen absoluten Pfad zum
View-Verzeichnis im
Controller. Ist nicht besonders elegant, aber es funktioniert.

class PublicHomeController < PublicController

self.append_view_path File.join(RAILS_ROOT, ‘public/resources’)

end

Viele
Grüße
Michael K.

Sebastian Wenzlaff schrieb:

Hi Michael,

ja, habe ich gefunden. Ich setze einen absoluten Pfad zum View-
Verzeichnis im Controller. Ist nicht besonders elegant, aber es
funktioniert.
Ok, das ist hier leider nicht praktikabel. Es gibt innerhalb meiner
Applikation gewisse “Packages”, die installiert werden können und die
Applikation erweitern, allerdings nutze ich dafür nicht die Rails-
Plugin-Architektur. Diese Packages müssen sich selbst verwalten und
selbst rendern. Es gibt also nen festen Template-Namen, z.B. “stage_0”
und jedes Package muss so ein Template beinhalten. Und die Dinger
liegen nun mal in “lib/”.

Ich mache derzeit folgendes unschönes:

def render_package_partial (package, current_stage)
path = “/#{package.class.path}/#{package.type}/views/
stage#{current_stage}.html.erb”
render :inline => File.read(path), :locals =>
{ package.class.to_sym => package }
end

Tja, nicht schön, aber selten.

MFG
Sebastian

Hallo Andreas,

vielen Dank für Deine Antwort. Die Anwendung läuft auf FreeBSD und, ja, ich
habe
schon mal was von Softlinks gehört.

Und weiterhin ja, ich kann sie natürlich einrichten.

Das bringt mir aber nicht viel, da der Administrator der Anwendung mit
Hilfe der
Systemeinstellungen des Programms die Pfade für seine eigenen
kundenspezifischen
Templates selbst festlegen können soll. Bei Deiner Lösung, müßte er dann auch
die Möglichkeit haben, Softlinks zu definieren, wenn er Pfadänderungen
vornimmt,
aber so weit sollen die Befugnisse denn doch nicht gehen.

Viele
Grüße
Michael K.

Andreas R. schrieb: