Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 09:44 
Offline
Schüler

Registriert: 27 Jul 2010, 17:45
Beiträge: 41
Guten morgen an alle hier, ich hab mal wieder eine Frage an die CGI'ler hier ;)

also, mittlerweile möchte ich meine CGI-Skripte nach dem MVC-Prinzip aufbauen, an sich auch kein Problem im Moment. Aber: wie genau spalte ich den view vom controller sauber ab?

vom view aus den controller zu starten ist ja kein problem, sondern vom controller aus den view zu starten! Wie genau kann ich einen view aufrufen (mit parametern)? Meine Ideen bisher:
-load() #=> Startet zwar ein Programm, aber als Childprozess und der Controller ist immernoch aktiv..
-exec() #=> Startet ein Programm und beendet das aktuelle, aber für cgi-skripte eher ungeeignet glaube ich, startet halt immer eine Kommandozeile -.-
-dereferrer im controller #=> keine parameterübergabe möglich.
-expliziten button zum anzeigen des views im controller #=> scheidet aus, das kanns nit sein!

... hat wer eventuell nen heißen Tipp für mich?^^

Bitte keine Kommentare aka "nimm rails!", unser provider unterstützt atm kein rails! Außerdem würde ich gerne verstehen wie das ganze funktioniert :-)

_________________
Einsteiger/Umsteiger zu Ruby? Interesse an Einstiegsinformationen zu GUI und/oder CGI? Lies doch gelegentlich in meinem Blog, ich würde mich freuen :)
http://ruby-info.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 10:07 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4847
Wohnort: RLP
Meinst du mit #load() Kernel#load?.

Das startet keinen Prozess.

Und was du hier andenkst, klingt mir sehr nach dem, was FCGI eh schon macht.

Gruß,
Skade


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 12:06 
Offline
Schüler

Registriert: 27 Jul 2010, 17:45
Beiträge: 41
ich bin relativ neu bei dem thema, deshalb mal die frage ganz konkret:

ich habe eine controller.rb, diese soll eine view.rb öffnen und dieser datei ein paar parameter mitgeben. wie genau mach ich das sauber als cgi-skript?

_________________
Einsteiger/Umsteiger zu Ruby? Interesse an Einstiegsinformationen zu GUI und/oder CGI? Lies doch gelegentlich in meinem Blog, ich würde mich freuen :)
http://ruby-info.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 12:29 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4847
Wohnort: RLP
Du öffnest in Ruby keine Dateien. Du übergibst auch niemals Parameter an Dateien, solches Verhalten ist in Ruby an allen Ecken und Enden verhindert (selbst bei #load). Du baust dir eine Controller-Klasse, bei einem Request erstellst du eine Instanz davon.

Wenn der Controller rendern will, erstellt er sich eine Instanz der View-Klasse.

Vorher requirest du beide.

Hast du dir bei der Gelegenheit eigentlich mal "Rack" angeschaut? Das spart dir den Interfacing-Kram mit dem Webserver und unterstützt CGI.

Gruß,
Skade


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 13:06 
Offline
Schüler

Registriert: 27 Jul 2010, 17:45
Beiträge: 41
ich kanns mir grad nicht wirklich vorstellen :(

aalso könntest du mir des an einem einfachen beispiel zeigen?

view_1 : user gibt in eine html maske seinen namen ein in ein formular, per POST-submit wird das ganze übertragen an den controller

->jeder buchstabe wird dort durch einen großbuchstaben ersetzt

view 2 : html-output an den user mit dem name.

...?

_________________
Einsteiger/Umsteiger zu Ruby? Interesse an Einstiegsinformationen zu GUI und/oder CGI? Lies doch gelegentlich in meinem Blog, ich würde mich freuen :)
http://ruby-info.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 15:40 
Offline
Interpreter
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 1231
Wohnort: Thüringen
Eine Möglichkeit für den View wäre die Verwendung von embeddet Ruby:
Das Rendern von erb.html Dateien geschieht über die Ruby-Library erb. Hier findest du die Dokumentation dazu, sogar mit einem Beispiel wie man so einen View erzeugt. Generell solltest du wissen, dass deine erb.html Dateien keine Rubydateien sind, du sie also so auch nicht in Ruby einbinden kannst. erb ist eine Library die solche Dateien einliest, den darin enthaltenen Rubycode evaluiert und die fertig generierte Datei zurückgibt. Wenn du Instanzvariablen o.ä. an den in der erb Datei enthaltenen Rubycode übergeben willst, musst du das über bindings machen. Auch hierfür gibt es etliche Beispiele in der API von erb.

Wenn du den View über Rubydateien lösen willst, würde ich den View als Klasse aufbauen.
z.B. so:


1
2
3
4
5
6
7
8
9
10
class MeinView < View

def initialize(text)
@text = text
end

def render
"<html><body>#{@text.upcase}</body></html>"
end
end


Dann requirest du den View im Controller und erzeugst ihn mit mein_view = View.new(params[:text]). Danach hängst du mein_view.render an den Body deines Response dran.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 15:44 
Offline
Schüler

Registriert: 27 Jul 2010, 17:45
Beiträge: 41
Das problem welches ich hier sehe ist, dass wir bei unserem hoster nichtmal gems nachinstallieren können, vom zugriff auf die httpd.conf ganz zu schweigen, von daher zweifel ich halt ob ich erb zum laufen kriege...

_________________
Einsteiger/Umsteiger zu Ruby? Interesse an Einstiegsinformationen zu GUI und/oder CGI? Lies doch gelegentlich in meinem Blog, ich würde mich freuen :)
http://ruby-info.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 15:54 
Offline
Interpreter
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 1231
Wohnort: Thüringen
ERB und eRubis sind zwei solche embeddet Ruby Implementationen, die in purem Ruby geschrieben sind. Du kannst also eines von beiden (eRubis soll wohl deutlich schneller sein) wie jedes andere Rubyscript auch mit require einbinden. Du brauchst es also nicht als Gem installieren.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 18:52 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4847
Wohnort: RLP
Gems kannst du auch einfach entpacken und hochladen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 10 Sep 2010, 21:05 
Offline
Schüler

Registriert: 27 Jul 2010, 17:45
Beiträge: 41
hmm... ich wäre wirklich dankbar wenn mir einer von euch mal mein obiges beispiel mal mit ein paar zeilen implementieren könnte ;)

also einmal erubis/erb/eruby und einmal als klassenkonzept. momentan bin ich noch vom klassenkonzept angetan, aber so richtig hab ichs noch nicht :(

_________________
Einsteiger/Umsteiger zu Ruby? Interesse an Einstiegsinformationen zu GUI und/oder CGI? Lies doch gelegentlich in meinem Blog, ich würde mich freuen :)
http://ruby-info.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 12 Sep 2010, 16:21 
Offline
Schüler

Registriert: 27 Jul 2010, 17:45
Beiträge: 41
Also, ich habe mich jetzt für den weg der implementierung über Klassen entschieden. Nach einigem studieren des MVC-Prinzips bin ich jetzt auf folgendem Wissensstand:

-Das "Herz" des ganzen ist der Controller. Er ruft die views auf und arbeitet mit den models, welche an der datenbank hängen.
-Models enthalten Klassen, die die eigentliche Arbeit ausführen, und hängen mit der Datenbank zusammen.
-Views sind für die Ein-/Ausgabe zuständig.

=> soweit so gut. für obiges Beispiel wäre das Model eine minimalistische Klasse, die einen String bekommt in die entsprechende Methode, und den gleichen String zurückliefert. Dies wird vom Controller aufgerufen und dann dem view übergeben, der die Variable zur Ausgabe braucht.

Jetzt habe ich immernoch das Problem, dass ich nicht wirklich weiß wie ich die view's am besten implementieren soll, ich bräuchte also zwei stück (ein + ausgabe). Die Ausgabe lässt sich ja einfach bewältigen, indem der controller den ausgabeview instanziert, und der entsprechenden Methode den String als Parameter mitgibt. Jetzt habe ich aber immernoch keine idee wie ich die eingabe regeln soll.

Bisher haben wir solche Programme eher "freestyle" geschrieben, durch html-formulare die per "submit" an ein script senden, welches XYZ ausführt, und dann per cgi wieder eine ausgabe hat. allerdings mit "here"-dokumenten, wegen der besseren lesbarkeit wenn mehr formatierungen/css hinzukommen. Wie aber ist das ganze denn nun zu bewältigen? ich kann ja nicht weiter so arbeiten, denn sonst würde mein eingabe-script immerwieder einen neuen controller starten, während der bisherige noch läuft... wie kann man denn die html-formulardaten hier geschickt übertragen?

*verzweifel*

_________________
Einsteiger/Umsteiger zu Ruby? Interesse an Einstiegsinformationen zu GUI und/oder CGI? Lies doch gelegentlich in meinem Blog, ich würde mich freuen :)
http://ruby-info.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 14 Sep 2010, 09:11 
Offline
Schüler

Registriert: 27 Jul 2010, 17:45
Beiträge: 41
hat denn keiner hier eine idee? :(

_________________
Einsteiger/Umsteiger zu Ruby? Interesse an Einstiegsinformationen zu GUI und/oder CGI? Lies doch gelegentlich in meinem Blog, ich würde mich freuen :)
http://ruby-info.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CGI Problem bei MVC Umsetzung
BeitragVerfasst: 14 Sep 2010, 09:41 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4847
Wohnort: RLP
Ich habe dir oben mehrere konkrete Fragen zur Umsetzung gestellt. Zurück kommen zwar Pläne, aber keine Versuche.

Also, wie stehts mit Rack? Hast du eventuell mal überlegt, Tilt für views zu verwenden? Hast du mal geschaut, wie das mit dem Gem entpacken geht?

Und vor allem: hast du mal was geschrieben, was wir uns anschauen und eventuell korrigieren können?

Gruß,
Skade


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: