[Perl] [연재] PSGI 입문 제1장 환경 변수의 일람을 낸다

11079 단어 PerlCgiplackPSGI
PSGI 입문에서 구구 또한 진짜 도입만으로 실용적인 구현이 좀처럼 보이지 않아서 힘들었으므로, 이 기사에서 그 근처를 팔로우하려고 합니다.

본 기사의 대상


  • CGI를 읽고 쓸 수 있습니다
  • 하지만, Mojolicious 사용하는 것은 망설임이 있다 (나와 같은 1 )
  • perl 사용

  • 필요한 환경(또는 본 기사에서는 기재하지 않는 준비운동)


  • perl 또는 perlbrew와 같은 설치 2
  • cpanm 설치 3
  • Plack 및 기타 본문에 나오는 모듈 설치

  • PSGI를 직접 쓰는 장점


  • 프로덕션 환경을 준비 할 때까지 서버 설정이 필요하지 않습니다 4

  • RoR 혹은 MVC라든지 이해하지 않아도 자신의 perl의 지식만으로 쓸 수 있다
  • HTTP 응답의 구조를 이해하지 않아도 걸립니다.
  • 바이바이(x)html4 & use CGI ! 헬로! 5 & use Text::Xslate !
  • 바이바이 use CGI::Carp !오류는 자동으로 표시해준다!

  • PSGI를 직접 쓰는 단점


  • 문서 조금! 너희들 ”Hallo World!” 그냥 끝내라!
  • 기본 세션 기능이 약합니다 (개인의 주관입니다) HTML5

  • 오늘의 주제: 환경 변수의 일람을 낸다.



    여기까지 집필해 스태미나 끊어졌으므로 연재로 합니다. 오늘의 주제는 환경 변수의 취득과 그 일람의 출력입니다.

    Myapp.pl
    use strict;
    use warnings;
    use Carp;
    
    use Plack::App::Path::Router::PSGI;
    use Path::Router;
    use Plack::Request;
    
    my $router = Path::Router->new;
    $router->add_route( '/' => target => \&env );
    
    # now create the Plack app
    my $app = Plack::App::Path::Router::PSGI->new( router => $router );
    $app->to_app();
    
    # 以下routerで呼ばれる要素
    sub env {
        my $env = shift;
        my @str;
        while ( my ( $key, $value ) = each %$env ) {
            push @str, "$key = $value" unless ref $value;
        }
        return response( $env,
            join( "<br>\n", '<html><body><h1>環境変数一覧</h1>', sort(@str), '</body></html>')
        );
    }
    
    # 以下サブルーチン
    sub response {
        my $env = shift;
        my $body = shift || croak 'empty body!';
        my %ARG = @_ if @_;
        my $status = $ARG{'-status'} || 200;
        croak "unvalid status: $status" if $status !~ /^\d{3}$/s;
        my $mime = $ARG{'-MIME'} || 'text/html; charset=utf-8';
        my $headers = $ARG{'-headers'} || {};
        my $req = Plack::Request->new($env);
        my $res = $req->new_response($status);
        $res->content_type($mime);
        $res->header( $headers );
        $res->body($body);
        $res->finalize;
    }
    
    __END__
    

    로, $ plackup Myapp.pl -r 에서 k 6
    어때! 쉽지! ? use Jcode;use utf8;use Encode; 도 필요 없습니다!

    다음 장



    7

    홍보



    이 기사는 자발적으로 유료 웹 서비스를 Perl로 쓰고 출시하는 것에 가까워서, 집착한 점이나 눈치채는 것을 공유하는 목적으로 쓰기 시작했습니다.

    PSGI 입문 제2장 CGI::Session을 PSGI로 무리하게 사용 이 QR 코드를 스마트폰으로 읽고,
    흥미를 가진 분은 까지 꼭 들러 주세요!




    웹 API를 구현하는 것도 아니고, 단순히 웹 애플리케이션을 구축하고 싶을 뿐이거나, RoR을 만지지 않았다면 Mojolicious는 문턱 높지 않습니까? h tps : // q로 w응. 메

      h tp : // 쿠이타. 코 m/짱스케/있어 ms/43543590dc6d14639아83

      ぃ tp // 이 m/은기의 3000/이고 ms/1세트 5c607828637c6976

    프로덕션 환경에서는 포트 80을 사용하기 위해 Apache/nginx를 멈추고 sudo를 사용하거나 솔직하게 Apache/nginx를 역방향 프록시로 사용할 필요가 있지만 plackup Myapp.pl 그래서 등과 브라우저에 치면 좋다. http://localhost:5000
    use Plack::Request; 또는 use Plack::Response; 시로 

    CGI::Session에 의존하면 $session->expire(‘+1y’) 또는 그리기를 원하지만 자체 구현해야합니다.
    -r 옵션은 스크립트 본문 및 ./lib 다음 변경 사항을 감지하고 자동으로 다시 시작하는 옵션.

    좋은 웹페이지 즐겨찾기