Dies ist eine interessante Frage und ist am einfachsten, indem man die Quelle in Angriff genommen. In Ihrem Beispiel verwenden Sie zu Recht
Mojolicious::Commands->start_app('MyApp');
am source Blick zeigt, dass start_app
eine ziemlich einfache Wrapper:
sub start_app {
my $self = shift;
return Mojo::Server->new->build_app(shift)->start(@_);
}
Es stellt sich heraus, dass build_app
ist as well:
sub build_app {
my ($self, $app) = @_;
local $ENV{MOJO_EXE};
return $app->new unless my $e = Mojo::Loader->new->load($app);
die ref $e ? $e : qq{Couldn't find application class "$app".\n};
}
eine Rückkehr neue Instanz der App-Klasse Die new
Funktion der Mojolicious-Klasse ist more involved, aber am Ende it just calls the familiar startup
method and returns the instance.
Dies bedeutet, dass Sie nicht einfach Argumente an die startup
-Methode von Ihrem Middleware-Wrapper übergeben können, der standardmäßig verwendet wird. Ich kann mir zwei Mechanismen vorstellen, um das zu erreichen, was Sie tun wollen: 1) Schreiben Sie Ihre eigene build_app
Funktion, die die Methode des Servers ersetzt, aber Argumente an $app->new
übergibt (was wiederum an startup
weitergegeben wird) oder 2) schreiben Sie Ihre eigene start_app
Funktion die könnte eine andere startup
ähnliche Funktion aufrufen.
# in MyApp.pm
sub startup {
... # as before
}
sub after_startup {
... # your new code here,
# or even most of what was in `startup` before
}
und
# app.psgi
builder {
...
my $app = Mojo::Server->new->build_app(shift);
$app->after_startup(@your_args_here);
$app->start(@_);
}
ich fragte auch die Quelle aber irgendwann aufgegeben. Ich dachte, es muss einen einfachen Weg geben, Parameter zu übergeben. aber da du einer der Hauptentwickler bist ... sollte vielleicht etwas wie 'Mojolicious :: Commands-> enable_app ('MyApp', @my_params)' zu Mojolicious hinzugefügt werden ;-)? – user2572744
können Sie gerne auf den [IRC-Kanal] (http://mojolicio.us/perldoc/Mojolicious/Guides/Contributing#Feature_requests) springen: #mojo auf irc.perl.org –