Questa è una domanda interessante ed è più facilmente affrontato, cercando in fonte. Nel tuo esempio si utilizza giustamente
Mojolicious::Commands->start_app('MyApp');
Guardando il source mostra che start_app
è un piuttosto semplice involucro:
sub start_app {
my $self = shift;
return Mojo::Server->new->build_app(shift)->start(@_);
}
Si scopre che build_app
è 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};
}
restituzione di un nuova istanza della classe della tua app. La funzione del classe Mojolicious new
è more involved, ma alla fine, it just calls the familiar startup
method and returns the instance.
Ciò significa che non è possibile passare facilmente argomenti al metodo startup
dal proprio wrapper middleware, utilizzato nel modo standard. Mi vengono in mente due meccanismi per realizzare ciò che si vuole fare: 1) scrivere la propria funzione build_app
per sostituire il metodo del server, ma che passa gli argomenti al $app->new
(che andrebbe passato alla startup
a sua volta) o 2) scrivere la propria funzione start_app
che potrebbe chiamare un'altra funzione startup
-like.
# in MyApp.pm
sub startup {
... # as before
}
sub after_startup {
... # your new code here,
# or even most of what was in `startup` before
}
e
# app.psgi
builder {
...
my $app = Mojo::Server->new->build_app(shift);
$app->after_startup(@your_args_here);
$app->start(@_);
}
fonte
2013-07-14 18:52:05
Ho anche chiesto la fonte, ma ad un certo punto ha rinunciato. Pensavo ci dovesse essere un modo semplice per passare i parametri. ma come tu sei uno degli sviluppatori principali ... forse qualcosa come 'Mojolicious :: Comandi-> enable_app ('MyApp', @my_params)' dovrebbe essere aggiunto al Mojolicious ;-)? – user2572744
siete invitati a salire sul [canale IRC] (http://mojolicio.us/perldoc/Mojolicious/Guides/Contributing#Feature_requests): #mojo su irc.perl.org –