eldorado1
Goto Top

Server-side Skriptsprache Ruby

Hallo,


ich bin im Besitz eines 1und1 Webhosting UNLIMITED Angebots.

Ich würde gerne Ruby als Server Skriptsprache wie PHP benutzen um meine Anfragen zu verarbeiten.
Allerdings weiß ich nicht wie ich Ruby Skripte so ausführen kann.


Ich habe schon versucht mit einer Shebang Zeile in meiner *.rb Datei

#!/usr/bin/ruby

Wobei ich auch nicht weiß ob die Angabe für den 1und1 server richtig ist

Wenn ich dann die URL aufrufe (www.myurl.de/myscript.rb), öffnet sich immer ein Dialog zum speichern der *.rb Datei


Vllt. kann mir hierbei ja jmd helfen.

PS: Ich meine nicht Ruby on Rails

Vielen Dank

Content-ID: 319187

Url: https://administrator.de/forum/server-side-skriptsprache-ruby-319187.html

Ausgedruckt am: 23.12.2024 um 16:12 Uhr

StefanKittel
StefanKittel 26.10.2016 um 19:26:40 Uhr
Goto Top
Hallo,

wenn bei 1und1 nicht explizit Ruby aufgeführt ist, gibt es das dort nicht.
Und in einer geteilten Umgebung kannst Du es nicht installieren.

Anderes Hosting oder eigenen Server.

Stefan
121747
121747 26.10.2016 aktualisiert um 22:46:12 Uhr
Goto Top
Das was du versuchst kann so nicht funktionieren, denn du hinterlegst deine File einfach nur auf einem Webserver (im Hintergrund werkelt da bspw. ein Apache oder Nginx). Wenn du die File per Browser aufrufst, wird da im Hintergrund (wahrscheinlich Aufgrund der fehlenden CGI Angaben) kein Ruby Interpreter aufgerufen sondern dein Browser behandelt die .rb File dann eben als Dokument und liefert dieses als Plain-Text zurück.

Wenn du Ruby serverseitig verwenden willst, dann muss der Webserver den du da hast das ausführen von Ruby CGI Skripten unterstützen und du must dein Ruby-Skript CGI Konform schreiben mit den entsprechenden Klassen und Funktionen.

Ich konnte auf der der schnelle nur sehen, dass dein Hosting Paket Ruby unterstützt, nur was das genau heißt, konnte ich nicht herausfinden. Hier steht ja irgendwie, man könnte wohl den shell-Zugang den Ruby Interpreter auf deinem Server aurufen. https://hilfe-center.1und1.de/hosting/1und1-hosting-c10085285/skript--un ... Mit der könntest du dann deine .rb File ausführen, das ist aber ja gar nicht das, was du machen möchtest.

Um es kurz festzuhalten:

Ruby als Backend Sprache wie PHP geht nur wenn dein Hosting Paket

1. Webserver mit Ruby CGI Unterstützung oder
2. Ruby on Rails Unterstützung

anbietet. Ob dein Webserver Ruby CGI Skripte unterstützt, musst du entweder ausprobieren (einfach mal nach hello world ruby.cgi suchen) oder bei 1und1 nachfragen.

Ansonsten bleibt nur dass, was StefanKittel sagt. Sich mal einen eigenen Webserver mit einem Linux aufsetzen und darauf Ruby CGI aktivieren, einen LAMP Stack oder Rails installieren hilft generell für das Verständnis und ist zum coden sowieso besser face-smile ...
eldorado1
eldorado1 30.10.2016 um 01:35:54 Uhr
Goto Top
Danke für deine Antwort

Ich werde es mal ausprobieren ob ein cgi skript funktioniert
eldorado1
eldorado1 01.11.2016 aktualisiert um 14:15:13 Uhr
Goto Top
Hallo,

habe nochmal etwas zu dem Thema gegooglet und bin dabei auf folgende Seiten gestoßen.
(Wundert mich, dass ich diese letztes mal nicht gefunden habe)

http://help.1and1.com/hosting-c37630/scripts-and-programming-languages- ...
(shebang Zeile muss bei mir abgeändert werden zu /bin/)

Allerdrings bekomme ich für jede Skriptsprache
ruby, python, perl, php
nur die Anzeige
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

habe auch noch das hier gefunden
http://hilfe-center.1und1.de/hosting/1und1-hosting-c10085285/skript--un ...
ist zwar für perl, aber müsste ja für alle gelten

PS:
in meinem Log Ordner habe ich eine info.py
wenn ich diese in meinem browser aufrufe kommt die fehlermeldung nicht

Hat vllt. jemand eine Idee woran das liegen kann?


vielen Dank
121747
121747 01.11.2016 um 17:38:13 Uhr
Goto Top
Du müsstest ein paar mehr Informationen geben, so ist es relativ schwierig, von außen was dazu zu sagen.

1. Du hast geschrieben, du bekommst die Fehlermeldung für jede Sprache (Ruby, Python, Perl, PHP). Kommt diese Fehlermeldung nur, wenn du CGI Code ausführst, oder auch wenn du normalen PHP Code (ohne CGI) ausführen möchtest? Sollte das nur auf CGI Skripte zutreffen, dann poste bitte einmal den Code den du benutzt der oben genannte Fehlermeldung erzeugt.

2. Was heißt, du bekommst bei der info.py keine Fehlermeldung? Poste bitte mal den Code der info.py und die Ausgabe wenn du diese File im Browser aufrufst

3. Poste bitte mal die Ordnerstruktur. Wo liegt die info.py, wo liegen deine andere Quellcode Dateien. Welche Rechte haben die Dateien?
eldorado1
eldorado1 02.11.2016 um 12:57:28 Uhr
Goto Top
1.

wenn ich php Seiten erstelle bekomme ich diese Fehlermeldung nicht
Skript Rechte 755

Perl
#!/usr/bin/perl

print "Content-Type: text/html\n\n";  
print "Hello World!";  

Python
#!/usr/bin/python

print "Content-Type: text/html\n\n";  
print "Hello World!";  

PHP
#!/usr/bin/php5

<?php echo "Hello World!"; ?>  

Ruby
#!/usr/bin/ruby

puts "Content-Type: text/html\n\n"  
puts "Hello World!"  

PS: Skripte mit Dateiendung *.cgi (oder je nach programmiersprache - außer Ruby, da hat .rb nicht funktioniert)

2.
info.py (Rechte 755)

Code:
#!/usr/bin/python

#
# This CGI script gives you the location of your Python interpreter,
# your path to Sendmail, your environment variables and a list of the
# Python modules that are installed on your web server.
#

import glob, os, re, string, sys, traceback
from stat import *

lang2css = {
    '0': '''  
    th        {font:bold 16px Arial,"Lucida Grande","Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Futura,Helvetica,sans-serif; color:#fff; background-color:#0A328C; padding:5px 0; }  
    td        {font:12px Arial,"Lucida Grande","Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Futura,Helvetica,sans-serif; line-height:1.5em; vertical-align:top;}  
    .leftcol  {width:35%; background-color:#E9F0FA; padding-left:5px;}
    .rightcol {width:65% }
    a:link    {font:12px Arial,"Lucida Grande","Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Futura,Helvetica,sans-serif; color:#002276; text-decoration: none;}  
    a:visited {font:12px Arial,"Lucida Grande","Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Futura,Helvetica,sans-serif; color:#002276; text-decoration: none;}  
    a:active  {font:12px Arial,"Lucida Grande","Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Futura,Helvetica,sans-serif; color:#000; text-decoration: underline;}  
    a:hover   {font:12px Arial,"Lucida Grande","Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Futura,Helvetica,sans-serif; color:#000; text-decoration: underline;}  
    h1        {font:bold 24px Arial,"Lucida Grande","Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Futura,Helvetica,sans-serif; margin:10px 0 4px;}  
    table     {margin:30px 0 0;}
    '''  
    }


installedmodules = {}

def is_executable(path):
    return (os.stat(path)[ST_MODE] & (S_IXUSR | S_IXGRP | S_IXOTH)) != 0

def listmodules(arg, dirname, names):	
    has_init_py = '__init__.py' in names  
    if has_init_py:
        for p in sys_path:
            if dirname[:len(p)] == p:
                dirname = dirname[len(p):]
                break
        if dirname[:1] == '/':  
            dirname = dirname[1:]
        if dirname[:4] == 'test':  
            return
        dirname = string.replace(dirname, "/", ".")  
        if dirname != '':  
            installedmodules[dirname] = None
        
    for mod in names:
        if (mod != "_") and (mod[:4] != 'test'):  
            ext = mod[-3:]
            if ext == '.py':  
                mod = mod[:-3]
            elif ext == '.so':  
                if mod[-9:-3] == 'module':  
                    mod = mod[:-9]
                else:
                    mod = mod[:-3]
            else:
                continue
            if has_init_py and (dirname != ''):  
                mod = dirname + "." + mod  
            installedmodules[mod] = None


print "Content-Type: text/html; charset=ISO-8859-1\n"  

try:
    lang = '0'  
    dbentry = os.getenv('DBENTRY')  
    if dbentry:
        m = re.search(r'#LANG (\d+)', dbentry)  
        if m:
            lang = m.group(1)

    try:
        css = lang2css[lang]
    except KeyError:
        css = lang2css['0']  


    print '''<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>
<head>
<title>Python Configuration</title>
<style type="text/css">  
<!--
''' 

    print css

    print ''' 
-->
</style>
</head>

<body bgcolor="#ffffff">  
<h1 style="text-align: center">Python Configuration</h1>  
'''  

    sys_path = sys.path[1:]
    sys_path.sort(lambda a, b: cmp(len(b), len(a)))

    for i in list(sys.builtin_module_names):
        installedmodules[i] = None

    libdirs = sys.path
    libdirs.sort()
    for dir in libdirs:
        os.path.walk(dir, listmodules, None)

    installedmodules = installedmodules.keys()
    installedmodules.sort()
    for i in range(len(installedmodules) % 3):
        installedmodules.append('')  

    py = {}
    py["version"] = string.split(sys.version)  
    py["platform"]= sys.platform  

    location = string.split(os.popen("whereis python", "r").read())  
    location = filter(lambda p: p == '/', location)  
    location.sort()
    for i in range(len(location)):
        if os.path.islink(location[i]):
            location[i] = location[i] + " -> " + os.readlink(location[i])  

    py["location"] = string.join(location, "<br>\n")  

    location = string.split(os.popen("whereis sendmail", "r").read())  
    location = filter(lambda p: p == '/', location)  
    location.sort()
    location = filter(is_executable, location)
    for i in range(len(location)):
        if os.path.islink(location[i]):
            location[i] = location[i] + " -> " + os.readlink(location[i])  
    
    py["sendmail"] = string.join(location, "<br>\n")  

    libdirs = sys.path
    if libdirs == '':  
        libdirs = './'  

    py["libdirs"] = string.join(libdirs, "<br>\n")  

    print '<table width="100%">'  
    print '''  
    <tr><th colspan="2">Program Paths</th></tr>  
    <tr><td class="leftcol"><b>Python version</b></td><td class="rightcol">%(version)s</td></tr>  
    <tr><td class="leftcol"><b>Python OS platform</b></td><td class="rightcol">%(platform)s</td></tr>  
    <tr><td class="leftcol"><b>Location of Python</b></td><td class="rightcol">%(location)s</td></tr>  
    <tr><td class="leftcol"><b>Location of Sendmail</b></td><td class="rightcol">%(sendmail)s</td></tr>  
    <tr><td class="leftcol"><b>Directories searched for Python modules</b></td><td class="rightcol">%(libdirs)s</td></tr>  
    ''' % py  
    print "</table>"  

    print '''<table width="100%">  
    <tr><th colspan="2">Environment Variables</th></tr>  
    '''  

    envvars = os.environ.keys()
    envvars.sort()
    for envvar in envvars:
        value = os.environ[envvar]
        print '<tr><td class="leftcol"><b>%s</b></td><td class="rightcol">%s<td></tr>' % (envvar, value)  
    print "</table>"  

    print '''<table width="100%">  
    <tr><th>Installed Modules</th></tr>
    <tr><td><pre>'''  

    rows = len(installedmodules) / 3
    mods = [ [], ,  ]
    maxlen = max(map(len, installedmodules))

    for i in range(rows):
        s = "%%-%ds %%-%ds %%s" % (maxlen, maxlen)  
        print s % (installedmodules[i], installedmodules[rows + i], installedmodules[2*rows + i])

    print "</pre></td></tr></table></body></html>"  

except:
    tb = traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)
    tb = string.join(tb, "")  
    print '<pre>%s</pre></body></html>' % tb  

Ausgabe:
siehe Bild + Installed Modules


3.
Ordnerstruktur:

/dir/myScript.cgi (myScript.py,*php,*pl) Rechte für Datei auf 755
/log/info.py
infopy
121747
121747 02.11.2016 aktualisiert um 16:41:01 Uhr
Goto Top
Um auszuschließen, dass CGI serverseitig falsch oder unvollständig auf dem Webserver konfiguriert wurde (oder du dich in einem Ordner bewegst, der hier ausgeschlossen ist): Bitte einmal folgendes prüfen:

1. Deine myScript.cgi Datei in den /log Ordner kopieren und von dort aus aufrufen
2. Testweise eine Kopie der info.py in den /dir Ordner legen und von dort aus aufrufen
3. einen anderen Ordner als /dir nehmen und sowohl info.py als auch myScript.cgi ausprobieren

Was sind die Ausgaben?
eldorado1
eldorado1 04.11.2016 aktualisiert um 20:09:10 Uhr
Goto Top
Habe ich alles getestet

also die info.py funktioniert in jedem Ordner

die myScript.py (mit Inhalt siehe oben für python) funktioniert in keinem Verzeichnis

aber was komisch ist...

wenn ich den Inhalt der "info.py" in die "myScript.py" kopiere bekomme ich wieder die Fehlermeldung...???
121747
121747 04.11.2016 aktualisiert um 21:42:40 Uhr
Goto Top
Das klingt ziemlich stark danach, dass dein Anbieter das ausführen von beliebigen CGI Skripten nicht erlaubt hat. Ich weiß natürlich nicht, was dein Webanbieter für einen Webserver nutzt. Bei Apache gibt es dafür in der httpd.conf eine Zeile die ungefähr so aussieht:

AddHandler cgi-script .py .rb .pl .cgi

Wenn man dort natürlich erst gar nicht alle Endungen erlaubt sondern nur konkrete Skriptnamen (wie z. B. info.py statt .py), dann funktioniert es natürlich nicht mit beliebigen Dateien.

Gibt es in deinem Webpaket vielleicht diesbezüglich Konfigurationsmöglichkeiten in deinem Webinterface? Vielleicht ist es so gedacht, dass du die Namen deiner Skripte vorher dem Webserver explizit bekannt machen musst. In jedem Fall bist du nun an dem Punkt, wo es sinnvoll ist, den Anbieter zu kontaktieren und nachzufragen. Wie im ersten Post geschrieben, ist nicht so ganz klar, was mit "Python, Ruby, Perl" im Umfang deines Paketes gemeint ist und falls das CGI Skripte mit einschließt - wovon ich ausgehen würde - wie du dies für deinen Webserver für weitere oder gar beliebige Dateien aktivierst.
eldorado1
eldorado1 05.11.2016 um 09:49:48 Uhr
Goto Top
Hallo,

danke für die Antwort
werde ich wohl mal in Kontakt mit 1&1 treten müssen

wobei die nur eine Telefonhotline haben...


habe gerade ausprobiert den Inhalt in die info.py zu kopieren.
Dann funktioniert es auch überall :|

Habe nur Einstellungen für php gefunden