just:

#!perl
use Mydispatch;
Mydispatch->dispatch();



and I write a simple one:


/MyApp# more Base.pm Foo.pm Bar.pm Dispatch.pm ../myapp.fcgi
::::::::::::::
Base.pm
::::::::::::::
package MyApp::Base;

use base 'CGI::Application::FastCGI';

1;
::::::::::::::
Foo.pm
::::::::::::::
package MyApp::Foo;

use base 'MyApp::Base';

sub setup {
    my $self = shift;
    $self->mode_param(
        param => 'rm',
        path_info => '1',
        );
    $self->start_mode('foo1');
    $self->run_modes(
        'foo1' => 'foo1',
        'foo2' => 'foo2',
        );
}

sub foo1 {
    my $self = shift;
    return "this is foo 1";
}

sub foo2 {
    my $self = shift;
    return "this is foo 2";
}

1;
::::::::::::::
Bar.pm
::::::::::::::
package MyApp::Bar;

use base 'MyApp::Base';

sub setup {
    my $self = shift;
    $self->mode_param(
        param => 'rm',
        path_info => '1',
        );
    $self->start_mode('bar1');
    $self->run_modes(
        'bar1' => 'bar1',
        'bar2' => 'bar2',
        );
}

sub bar1 {
    my $self = shift;
    return "this is bar 1";
}

sub bar2 {
    my $self = shift;
    return "this is bar 2";
}

1;
::::::::::::::
Dispatch.pm
::::::::::::::
package MyApp::Dispatch;

use base 'CGI::Application::Dispatch';

sub dispatch_path {
    my $uri = $ENV{'REQUEST_URI'};
    my $name = $ENV{'SCRIPT_NAME'};

    $uri =~s/^$name//;
    $uri =~s/\?.*$//;

    $ENV{'PATH_INFO'} = $uri;
    warn "[+] $uri\n";
    return $uri;
}

sub dispatch_args {
    return {
        prefix => 'MyApp',
        table => [
            '' => { app => 'Foo' },
            ':app/:rm' => {},
            ],
    };
}

1;
::::::::::::::
../myapp.fcgi
::::::::::::::
#!/usr/bin/perl

use lib "/var/www/fcgi/myapp";
use MyApp::Dispatch;

MyApp::Dispatch->dispatch();




### nginx config:

  location /myapp {
    fastcgi_pass unix:/tmp/fcgi.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_NAME "/myapp";
  }

### start the fastcgi script with lighttpd's spawn-fcgi
spawn-fcgi -u www-data -g www-data -c / -s /tmp/fcgi.sock -f
/path/to/myapp.fcgi -n






2009/3/21 Michael Peters <[email protected]>:
> silent wrote:
>
>> but it seems not work, all the request goto the default app default
>> run_mode.
>
> You don't show where you're using Mydispatch or how your using it.
>
> --
> Michael Peters
> Plus Three, LP
>

#####  CGI::Application community mailing list  ################
##                                                            ##
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp    ##
##                                                            ##
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:          http://cgiapp.erlbaum.net/                 ##
##                                                            ##
################################################################

Reply via email to