加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何将plack应用程序中的参数传递给构建器中启用的mojol

发布时间:2020-12-15 23:33:56 所属栏目:大数据 来源:网络整理
导读:给出了使用大量中间件组件和一个mojolicious应用程序的示例plack app 在构建器中启用(见下文),如何将参数从app.psgi传递给Mojolicious 没有使用丑陋的%ENV hack显示?传递配置的原因只是一个例子,这可能是任何标量/对象. app.psgi use Plack::Builder;$ENV{
给出了使用大量中间件组件和一个mojolicious应用程序的示例plack app
在构建器中启用(见下文),如何将参数从app.psgi传递给Mojolicious
没有使用丑陋的%ENV hack显示?传递配置的原因只是一个例子,这可能是任何标量/对象.

app.psgi

use Plack::Builder;

$ENV{CONFIG} = {...};

builder {
    ...
    Mojolicious::Commands->start_app('MyApp');
};

MyApp.pm

package MyApp;

use Mojo::Base 'Mojolicious';

sub startup {

    my $self = shift;
    my $r = $self->routes;

    $self->config( $ENV{CONFIG} );

    $r->route('/')->to('home#');        
}

解决方法

这是一个有趣的问题,通过查看来源最容易解决.在你的例子中,你正确使用

Mojolicious::Commands->start_app('MyApp');

查看source显示start_app是一个相当简单的包装器:

sub start_app {
  my $self = shift;
  return Mojo::Server->new->build_app(shift)->start(@_);
}

事实证明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};
}

返回应用类的新实例. Mojolicious类的新功能是more involved,但最终,it just calls the familiar startup method and returns the instance.

这意味着您无法轻松地从标准方式使用的中间件包装器将参数传递给启动方法.我可以想到两种机制来完成你想要做的事情:1)编写你自己的build_app函数来替换服务器的方法但是将参数传递给$app-> new(它将依次传递给启动)或2)编写自己的start_app函数,可以调用另一个类似启动的函数.

# in MyApp.pm

sub startup {
  ... # as before
}

sub after_startup {
  ... # your new code here,# or even most of what was in `startup` before
}

# app.psgi

builder {
  ...
  my $app = Mojo::Server->new->build_app(shift);
  $app->after_startup(@your_args_here);
  $app->start(@_);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读