Revision cff913a1
Von Moritz Bunkus vor mehr als 7 Jahren hinzugefügt
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
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.