Ruby und Strato
frankx
- provider
Hellihello,
an Stratokenner die Frage: gemäß Anleitung habe ich mir dort via FTP (nicht Telnet) ein Verzeichnis cgi-bin angelegt, die Rechte auf 755 gesetzt und eine Datei per FTP im Ascii-Modus aufgespielt mit dem Inhalt:
#!usr/bin/ruby
BEGIN {
puts "Hallo Welt!"
}
und auch hier die Rechte auf 755 gesetzt.
Immer nur bekomme ich den Internal Server Error 500. Egal ob die Datei test.rb oder test.cgi heißt. Wer weiß, was ich falsch mache?
Dank und Gruß,
frankx
Hellihello,
an Stratokenner die Frage: gemäß Anleitung habe ich mir dort via FTP (nicht Telnet) ein Verzeichnis cgi-bin angelegt, die Rechte auf 755 gesetzt und eine Datei per FTP im Ascii-Modus aufgespielt mit dem Inhalt:
#!usr/bin/ruby
BEGIN {
puts "Hallo Welt!"
}
Vielleicht brauchst du zerst noch ein
puts "Content-type: text/html\n\n";
bzw.
puts "Content-type: text/plain\n\n";
?
fg,
p
Hellihello p,
dank aber das hülft nischt. Ich hätte jetzt auch gedacht, dass bei der Ausgabe der Server ja bereits keinen Error mehr hätte, der kontolliert ja vermutlich nicht, ob ein Browser das kapieren könnte, oder tut er?
Dank und Gruß,
frankx
Hi frankx,
dank aber das hülft nischt. Ich hätte jetzt auch gedacht, dass bei der Ausgabe der Server ja bereits keinen Error mehr hätte, der kontolliert ja vermutlich nicht, ob ein Browser das kapieren könnte, oder tut er?
Tut er in gewisser Weise schon - du musst dem Server mindestens den Statuscode und den Content-Type mitteilen, unter welchem er das Dokument ausliefern soll. Bei Programmiersprachen wie PHP wirst du nur insofern verwöhnt, als dass PHP für dich Standardwerte sendet, sofern du nicht selber etwas angibst.
Desweiteren fehlte ein Slash am Beginn des Pfades - ist der Pfad an sich den korrekt? Hat dein Provider dir den so mitgeteilt?
Wenn ja, dann probier einfach mal:
puts "Status: 200 OK\r\n";
puts "Content-Type: text/plan\r\n";
puts "\r\n";
puts "Hallo Welt!";
Ich höffe dass Ruby \r und \n durch die entsprechendne Zeilenumbrüche (CL und RF oder so) ersetzt - ich kenne mich mit Ruby nicht aus ;-)
MfG, Dennis.
Hellihello Dennis,
und ihr da oben. Dank, mit text/plan kommt die Frage zum Download, mit
#!/usr/bin/ruby
BEGIN {
puts "Status: 200 OK\r\n";
puts "Content-Type: text/html\r\n";
puts "\r\n";
puts "Hallo Welt!";
}
schnuffelts dann. Wobei es auch ohne Statuszeile geht, nicht aber ohne den Slash vor "usr" und nicht ohne die Absatzzeile zwischen Contentype und Hallowelt.
besten dank,
frankx
Hi frankx,
Wobei es auch ohne Statuszeile geht, nicht aber ohne den Slash vor "usr" und nicht ohne die Absatzzeile zwischen Contentype und Hallowelt.
Stimmt - Denkfehler meinerseits, fehlt die Statuszeile, so wird sie i.d.R. vom Webserver mit 200 OK (und richtigem Protokoll) ergänzt. Das es ohne den Slash vor usr nicht klappt ist klar, weil dann ist es einfach der falsche Pfad zum Ruby-Interpreter - du kannst ja bei einem Windowspfad auch nicht vorne den Laufwerksbuchstaben weglassen ;-) (ich weiß, Vergleiche hinken *g*).
Die Absatzzeile zwischen Headern (hier lediglich der Header Content-Type) und dem Inhalt (hier Hallo Welt) ist einfach notwendig, weil irgendwer mal für das HTTP-Protokoll festgelegt hat, dass Header und Inhalt durch eine Leerzeile voneinander getrennt sind ;-) Genauso ist festgelegt, dass die einzelnen Header mit \r\n beendet (bzw. voneinander getrennt) werden müssen und nicht lediglich nur mit \n [1].
MfG, Dennis.
[1] \r wie auch \n steht hierbei lediglich als Platzhalter für die „wirklichen” Zeilenumbrüche.
Hellihello Dennis,
Die Absatzzeile zwischen Headern (hier lediglich der Header Content-Type) und dem Inhalt (hier Hallo Welt) ist einfach notwendig, weil irgendwer mal für das HTTP-Protokoll festgelegt hat, dass Header und Inhalt durch eine Leerzeile voneinander getrennt sind ;-)
Wie kann ich mir die Interaktion mit einer CGI-Anwendung denn vorstellen? Der Server erkennt an der Dateiendung, welches Programm der damit ansprechen möchte, bzw. um Interpretation bittet, und erwartet dann seinerseits eine Rückgabe, die dem HTT-Protokoll entspricht? Und wenn es den geforderten Konventionen wiederspricht, gibt es einen internen Serverfehler?
Ich hatte ja wohl fälschlicherweise vermutet, dass der einfach unbesehen ausspuckt, was das Programm zurückgibt an Text und dann wäre es ja Browserproblem, damit umzugehen, wenn kein Content-Type vorhanden ist.
\r wie auch \n steht hierbei lediglich als Platzhalter für die „wirklichen” Zeilenumbrüche.
Und was ist ein wirklicher Zeilenumbruch, ein ASCII-Wert?
dank
frankx
Hi frankx,
Wie kann ich mir die Interaktion mit einer CGI-Anwendung denn vorstellen? Der Server erkennt an der Dateiendung, welches Programm der damit ansprechen möchte, bzw. um Interpretation bittet, und erwartet dann seinerseits eine Rückgabe, die dem HTT-Protokoll entspricht? Und wenn es den geforderten Konventionen wiederspricht, gibt es einen internen Serverfehler?
Hm, jein - es gibt da verschiedene Möglichkeiten:
Ich hatte ja wohl fälschlicherweise vermutet, dass der einfach unbesehen ausspuckt, was das Programm zurückgibt an Text und dann wäre es ja Browserproblem, damit umzugehen, wenn kein Content-Type vorhanden ist.
Der Server hat dir vermutlich einen Internal Server Error angeguckt - in diesem Fall solltest du immer in die error.log Datei des Apaches gucken, da steht nämlich meist eine genauere Fehlerbeschreibung drin. Wenn du nicht weißt wo diese error.log ist, frag deinen Provider - wenn dieser dir keine zur Verfügung steht, dann wechsel den Provider.
In deinem Fall dürfte die altbekannte Meldung „Premature End of Script Headers” in der error.log gestanden haben - das deutet meist darauf hin, dass das CGI-Script nicht alle notwendigen Header gesendet hat.
\r wie auch \n steht hierbei lediglich als Platzhalter für die „wirklichen” Zeilenumbrüche.
Und was ist ein wirklicher Zeilenumbruch, ein ASCII-Wert?
Ja, es handelt sich hierbei um „Schriftzeichen” wie Buchstaben auch und welche in ASCII enthalten sind - du kannst sie lediglich nicht sehen, weshalb man sie (zusammen mit Leerzeichen u.a.) auch Whitespaces nennt.
AFAIK handelt es sich um die ASCII-Werte 10 und 13 - wobei ich jetzt nicht weiß welcher davon \r und welcher \n entspricht…
MfG, Dennis.
Hallo frankx.
und ihr da oben. Dank, mit text/plan kommt die Frage zum Download, […]
Logisch, es heißt ja auch „text/plain“.
Einen schönen Montag noch.
Gruß, Mathias
Hellihello Dennis,
und ihr da oben. Dank, mit text/plan kommt die Frage zum Download, mit
#!/usr/bin/ruby
BEGIN {
puts "Status: 200 OK\r\n";
puts "Content-Type: text/html\r\n";
puts "\r\n";
puts "Hallo Welt!";
}
schnuffelts dann. Wobei es auch ohne Statuszeile geht, nicht aber ohne den Slash vor "usr" und nicht ohne die Absatzzeile zwischen Contentype und Hallowelt.
besten dank,
frankx
Was steht im error.log?
Hellihello richard,
Was steht im error.log?
hatte ich mich auch schon gefragt und finde nicht, wo ich die finde...;
dank
frankx
Hallo jUnit (oder besser Richard?),
Ich glaube, hier liegt eine grobe Verwechslung vor: gib entweder deine oder keine EMail-Adresse bzw. Homepage-URL an!
Beste Grüße
Richard
Huhu
#!usr/bin/ruby
probier es mal so
#!/usr/bin/ruby
Viele Grüße
lulu
Hellihello lulu,
dank des tipps, hilfochnischt,
frankx
Hellihello lulu,
dank des tipps, hilfochnischt,
wie wärs mal mit etwas Systematik?
Was sagt die Konsole, was steht im Log, usw.
Viele Grüße,
Reiner
Ich grüsse den Cosmos,
#!usr/bin/ruby
Das heisst
#!/usr/bin/ruby
Möge das "Self" mit euch sein
Ich grüsse den Cosmos,
Hab grad gelesen, das du das schon probiert hast.
Hast du nen Shellzugriff?
Wenn ja, was passiert, wenn du
/usr/bin/ruby -v
eingibst?
Möge das "Self" mit euch sein