call.pl 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!/usr/bin/env perl
  2. # Use to call specific routes
  3. use strict;
  4. use warnings;
  5. use Data::Dumper;
  6. use FindBin::libs;
  7. use FindBin;
  8. use Carp::Always;
  9. chdir $FindBin::Bin;
  10. $ENV{HOME}=$FindBin::Bin;
  11. #Grab our custom routes
  12. use TPSGI;
  13. my $host = $ENV{DOMAIN} // 'localhost';
  14. my %env = (
  15. REQUEST_METHOD => $ARGV[0],
  16. PATH_INFO => $ARGV[1],
  17. QUERY_STRING => $ARGV[2],
  18. REQUEST_URI => "http://$host/".$ARGV[1],
  19. HTTP_HOST => $host
  20. );
  21. sub emit_error {
  22. my $env = shift;
  23. return $env->{'psgi.errors'}->print(shift) if $env->{'psgi.errors'};
  24. print $@;
  25. }
  26. our $app = sub {
  27. my $self = TPSGI->new(TPSGI::get_config());
  28. local $@;
  29. return eval { $self->app(@_) } || do {
  30. my $env = shift;
  31. emit_error($env, $@);
  32. # Redact the stack trace past line 1, it usually has things which should not be shown
  33. $self->{cur_query}->{message} = $@;
  34. $self->{cur_query}->{message} =~ s/\n.*//g if $self->{cur_query}->{message};
  35. return $self->error($self->{cur_query});
  36. };
  37. };
  38. sub stream_to_stdout {
  39. my ($input) = @_;
  40. my ( $code, $headers ) = @$input;
  41. print "RC: $code\n";
  42. print "Headers:\n";
  43. print Dumper($headers);
  44. return \*STDOUT;
  45. }
  46. my $limit = $ARGV[3] || 1;
  47. for ( 1 .. $limit ) {
  48. my $out = $app->( \%env );
  49. if (ref $out eq 'CODE') {
  50. $out->(\&stream_to_stdout);
  51. next;
  52. }
  53. if (ref $out eq 'ARRAY') {
  54. print $out->[2][0];
  55. next;
  56. }
  57. die "Weird return:\n".Dumper($out);
  58. }