Frage

Ich habe eine lokale Perl Web-Umgebung auf meinem Windows-Rechner einrichten. Die Anwendung arbeite ich an ist ursprünglich von einem Linux-Server, und so die shebang für Quelle .pl Dateien aussehen wie folgt:

#!/usr/bin/perl

Dies verursacht den folgenden Fehler auf meiner Windows-Dev-Maschine:

(OS 2)The system cannot find the file specified.

Ist es möglich, meine Apache 2 conf zu ändern, so dass der shebang auf meinem Windows-Rechner ignoriert wird? Natürlich konnte ich die Shebang #!c:\perl\bin\perl.exe gesetzt, so viel liegt auf der Hand; aber das Problem kommt, um die aktualisierten Dateien bereitstellen. Offensichtlich wäre es sehr umständlich auf jedem deploy diese wieder zu ändern. Ich verwende ActivePerl auf Windows 7.

Update:

Ich habe erwähnt, dass ich brauche den shebang zu halten, so dass die Skripte auf unserem Shared-Hosting Linux Produktionsserver arbeiten. Wenn ich nicht diese Einschränkung hatte, und ich habe nicht die shebang zu verwenden, wäre die offensichtliche Antwort sein, nur sie nicht verwendet werden.

War es hilfreich?

Lösung

Ich verwende #!/usr/bin/perl in meinen Skripte und Konfiguration von Apache auf Windows die Shebang-Zeile zu ignorieren. Hinzufügen

 ScriptInterpreterSource Registry-Strict

Ihren httpd.conf und die Windows-Registrierungsschlüssel wie erläutert einrichten in der Apache docs .

Hier ist, was ich bekomme, wenn ich den Schlüssel exportieren:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]
@="c:\\opt\\perl\\bin\\perl.exe"

Ich habe mit diesem Setup mit Apache und Activestate Perl auf meinem Windows-Laptop und die Apache und Perl-Distributionen, die auf meinem Server mit ArchLinux kommen.

Der Apache-Dokumentation (auf die ich oben verlinkt) Zustand:

  

Die Option Registry-Strict, die in Apache 2.0 neu macht das Gleiche wie Registry verwendet aber nur die Unterschlüssel Shell\ExecCGI\Command. Die ExecCGI Schlüssel ist nicht ein allgemeines. Es muss manuell in der Windows-Registrierung konfiguriert werden und somit verhindert die versehentlichen Programmaufruf auf Ihrem System . (Hervorhebung von mir)

Andere Tipps

Es gibt keine tragbare shebang Linie. Auch auf der gleichen Plattform und Architektur, jemand installiert Perl könnte, ist eine andere Stelle.

Der Trick ist, nicht-Module und Skripte von Hand zu installieren. Wenn Sie alles, was als Paket und das Modul Toolchain verwenden, werden die shebang Linien automatisch zu Punkt zum Perl geändert verwendet, um alles zu installieren. Sie sollten nicht haben über diese Details zu denken. :)

Ich verwende #! /usr/bin/env perl als shebang auf alle meine Perl, ob auf * nix oder Windows. Windows ignoriert es einfach, und die Unixen folgen env dem gewählten Perl disto.

So wie ich diese Arbeit hatte, war perl.exe bis c kopieren: / usr / bin / und benennen Sie sie in Perl (die EXE-Streifen)

In win7 und bis Sie können dies auch mit dem "dos" Befehl mklink.

Starten Sie ein cmd Shell als Administrator und etwas tun, wie folgt aus:

mklink /d c:\usr c:\Perl       # Activestate perl in c:\Perl\bin\perl.exe
mklink /d c:\usr c:\xampp\perl # Xampp perl in c:\xampp\perl\bin\perl.exe

Ich habe keine Windows-praktisch, aber PerlCritic sagt:

my $desc = q{Found platform-specific perl shebang line};
my $expl = q{Perl source in parrot should use the platform-independent shebang line: #! perl};

Also, ich denke #! perl funktionieren soll.

Edit: funktioniert nicht auf Linux; anscheinend funktioniert in parrot, obwohl ich nicht sehen, wie sie das schaffen.

  1. Installieren jeder Windows-Bash Geschmack (wie Cygwin, MSYS2 oder GnuWin32);
  2. Erstellen Sie einen trivialen Umleiten Shell-Skript:

    exec "@"
    
  3. Erstellen Sie einen Registrierungseintrag hinzu:

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command]
    @="<path-to-sh> <path-to-script>"
    
    [HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]
    @="<path-to-sh> <path-to-script>"
    
    [HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command]
    @="<path-to-sh> <path-to-script>"
    

    (... und so weiter.)

  4. Jot in Ihrer httpd.conf-Datei:

    ScriptInterpreterSource Registry
    

Apache wird nun Unix Bauden in Bezug auf die von Ihrem gewählten Bash Geschmack gegeben Interpretation lösen. Dies gibt viel mehr Flexibilität als hartzucodieren Interpreter Pfade in der Registrierung.

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