Frage

(Bär mit mir, ich verspreche das wird zu Kram und windows.)

Ich habe über die einfachsten WEBRick-Server zusammen gestellt:

require 'webrick'
include WEBrick

s = HTTPServer.new(:Port=>2000, :DocumentRoot=>Dir::pwd)
s.start

Könnte nicht einfacher sein.Dieses basic-server akzeptiert http-verbindungen (firefox, internet Explorer, wget, TELNET) und befasst sich mit den Ihnen angemessen, wie lange bin ich abrufen nur statische Dokumente.Wenn ich jedoch eine der Dateien im Verzeichnis zu haben .cgi-Erweiterung, bekomme ich einen 500 zurück und die folgenden Schritte auf dem server die terminal:

ERROR CGIHandler: c:/rubyCGI/test.cgi: 
C:/...[snip]...webrick/httpservlet/cgi_runner.rb:45: in 'exec': Exec format error - ...[snip]...

Ich habe ein paar Dinge getan, auf die Befehlszeile zu imitieren, was Los ist in Zeile 45 von cgi_runner.rb

c:\>ruby
exec "c:/rubyCGI/test.cgi"
^Z
(same error erupts)

c:\>ruby
exec "ruby c:/rubyCGI/test.cgi"
^Z
Content-type: text/html

Mares eat oats and does eat oats and I'll be home for Christmas.

Klar, WEBrick wurde nicht gelöscht, für die Landung auf windows.Ihren üblichen Kopfschmerzen corporate paranoia hindern mich daran ändern webrick, so kann ich die shebang-notation im c:/rubyCGI/test.cgi anerkannt durch das Betriebssystem (windows), damit ich nicht explizit sagen es jedes mal, wenn die Dolmetscher zu bedienen? Ich könnte ordnen Sie alle .cgi-Dateien werden im Zusammenhang mit ruby, aber das wäre die Begrenzung auf lange Sicht.

UPDATE:Da dieses posting, es ist mir eingefallen, dass es vielleicht nicht möglich, führen Sie eine cgi-web-server von ruby;ruby hat keine Verzweigung zu unterstützen.Ohne die Fähigkeit zu Gabel ein Prozess, eine cgi-server führen Sie die einzelnen cgi-Skript-one-at-a-time, vernachlässigen alle gleichzeitigen Anforderungen, während der erste abgeschlossen.Zwar mag dies akzeptabel sein, für einige, würde es nicht funktionieren für meine Anwendung.Trotzdem würde ich immer noch sehr daran interessiert, die Antwort auf meine ursprüngliche Frage—, dass der erste Programm, das unter windows arbeitet.

War es hilfreich?

Lösung

Ich denke, was Sie wollen, ist die Dateierweiterung mit Ruby zu verknüpfen. Ich glaube nicht, es ist möglich, die #! Notation zu erhalten unter Windows zu arbeiten, aber es ist möglich, Windows zu erhalten, um automatisch ein Skript mit einem bestimmten Interpreter zu starten (wie in Ihrem zweiten Beispiel). Ein guter Schritt für Schritt Diskussion darüber, was Sie tun wollen würde, ist hier. Sie speziell möchten der Abschnitt mit der Überschrift: „Um Dateizuordnungen für unassociated Dateitypen zu erstellen“. Ich denke, das wird erreichen, was Sie zu tun versuchen.

Andere Tipps

Eine generische Lösung, die funktioniert sowohl für Ruby 1.8.6.pxxx und 1.9.1.p0 auf Windows ist die folgende:

Bearbeiten Sie die Datei:c: uby\lib uby\1.9.1\webrick\httpservlet\cgi_runner.rb

Fügen Sie die folgenden Zeilen am Anfang der Datei:

if "1.9.1" == RUBY_VERSION
  require 'rbconfig'  #constants telling where Ruby runs from
end

Jetzt, suchen Sie die Letzte Zeile, in dem Sie sagt:exec ENV["SCRIPT_FILENAME"] Kommentar, line-out und fügen Sie den folgenden code:

# --- from here ---
if "1.9.1" == RUBY_VERSION  #use RbConfig
  Ruby = File::join(RbConfig::CONFIG['bindir'],
                        RbConfig::CONFIG['ruby_install_name'])
  Ruby << RbConfig::CONFIG['EXEEXT']
else                        # use ::Config
  Ruby = File::join(::Config::CONFIG['bindir'],
                        ::Config::CONFIG['ruby_install_name'])
  Ruby << ::Config::CONFIG['EXEEXT']
end

if /mswin|bccwin|mingw/ =~ RUBY_PLATFORM
  exec "#{Ruby}", ENV["SCRIPT_FILENAME"]
else
  exec ENV["SCRIPT_FILENAME"]
end
# --- to here ---

Speichern Sie die Datei und starten Sie den webrick-server.

Erklärung:Dieser code erstellt eine variable, 'Ruby', die mit den vollständigen Pfad zu "ruby.exe", und (wenn Sie unter Windows) geht es den zusätzlichen parameter "c: uby\bin uby.exe" der Kernel.exec () - Methode, so dass Sie Ihre script ausgeführt werden kann.

Nicht wirklich zu streiten ... aber warum die Mühe webrick wenn Mischlings viel schneller und mit nativem mit Fenstern zusammengestellt? Und Coz, das bedeutet kein shebang benötigt wird.

Eigentlich ist es möglich, Windows zu erhalten shebang Notation in Skriptdateien zu erkennen. Es kann in einem relativ kurzen Skript in sagen, Rubin oder AutoIt erfolgen. Nur ein recht einfacher Parser für die erste Zeile einer Skriptdatei erforderlich ist, zusammen mit einiger Dateimanipulation. Ich habe das ein paar Mal gemacht, wenn entweder Quer compatibilty von Skriptdateien benötigt wurde oder wenn Windows-Dateierweiterungen nicht ausreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top