Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision cff913a1

Von Moritz Bunkus vor mehr als 7 Jahren hinzugefügt

  • ID cff913a1c984f82558a7d59dec0b8b1a06c5530d
  • Vorgänger 7c3c6e8d
  • Nachfolger ea4101ec

Startup: Include-Pfade mittels FindBin ermitteln

Neue Perl-Versionen werden das aktuelle Verzeichnis '.' aus dem
Standard-Include-Pfad @INC entfernen. Das bedeutet für uns, dass wir
nicht mehr einfach »use SL::Dispatcher;« und ähnliche Konstrukte machen
können.

Daher stellt dieser Commit all diejenigen Perl-Dateien, die als externe
Einstiegsquelle dienen, auf die Verwendung von FindBin um. Es werden
nicht nur die Verzeichnisse »modules/override« und »modules/fallback«
behandelt, sondern auch das Installationsverzeichins selber mit in @INC
aufgenommen, um für die Entfernung von '.' gewappnet zu sein.

Zusätzlich wurden die meisten Scripte so modifiziert, dass sie nicht
mehr direkt aus dem kivitendo-Installationsverzeichnis heraus aufgerufen
werden müssen sondern aus beliebigen Verzeichnissen heraus aufgerufen
werden können. Sie wechseln schlicht zu allererst das aktuelle
Verzeichnis ins kivitendo-Installationsverzeichnis.

Perl-Module, die nicht direkt Scripte sind und den Pfad zum
Installationsverzeichnis benötigen (also z.B. SL/DBUpgrade2.pm), dürfen
allerdings FindBin nicht benutzen, weil $FindBin::Bin das Verzeichnis
zum aufgerufenen Perl-Script enthält, und das kann mal dispatcher.pl
sein, mal scripts/dbupgrade2.pl. Für diese Module gibt es weiterhin
SL::System::Process->exe_dir, die das kivitendo-Installationsverzeichnis
zuverlässig ermittelt.

Leider ist es nicht möglich, nur SL::System::Process->exe_dir anstelle
von $FindBin::Bin zu nutzen, da zuerst SL::System::Process eingebunden
werden muss, und um das zu tun, muss das Installationsverzeichnis ja
bereits im Include-Pfad vorhanden sein — typical case of catch 22.

Unterschiede anzeigen:

scripts/task_server.pl
1 1
#!/usr/bin/perl
2 2

  
3

  
4
use List::MoreUtils qw(any);
5

  
6 3
use strict;
7 4

  
8 5
my $exe_dir;
9 6

  
10 7
BEGIN {
11 8
  use FindBin;
12
  use lib "$FindBin::Bin/..";
13 9

  
14
  use SL::System::Process;
15
  $exe_dir = SL::System::Process::exe_dir;
16

  
17
  unshift @INC, "${exe_dir}/modules/override"; # Use our own versions of various modules (e.g. YAML).
18
  push    @INC, "${exe_dir}/modules/fallback"; # Only use our own versions of modules if there's no system version.
19
  unshift @INC, $exe_dir;
20

  
21
  chdir($exe_dir) || die "Cannot change directory to ${exe_dir}\n";
10
  unshift(@INC, $FindBin::Bin . '/../modules/override'); # Use our own versions of various modules (e.g. YAML).
11
  push   (@INC, $FindBin::Bin . '/..');                  # '.' will be removed from @INC soon.
12
  push   (@INC, $FindBin::Bin . '/../modules/fallback'); # Only use our own versions of modules if there's no system version.
22 13
}
23 14

  
24 15
use CGI qw( -no_xhtml);
......
29 20
use Encode qw();
30 21
use English qw(-no_match_vars);
31 22
use File::Spec;
23
use List::MoreUtils qw(any);
32 24
use List::Util qw(first);
33 25
use POSIX qw(setuid setgid);
34 26
use SL::Auth;
......
43 35
use SL::LxOfficeConf;
44 36
use SL::Locale;
45 37
use SL::Mailer;
38
use SL::System::Process;
46 39
use SL::System::TaskServer;
47 40
use Template;
48 41

  
......
294 287
  }
295 288
}
296 289

  
297
chdir $exe_dir;
290
$exe_dir = SL::System::Process->exe_dir;
291
chdir($exe_dir) || die "Cannot change directory to ${exe_dir}\n";
298 292

  
299 293
mkdir SL::System::TaskServer::PID_BASE() if !-d SL::System::TaskServer::PID_BASE();
300 294

  

Auch abrufbar als: Unified diff