tpsgi 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/env starman
  2. #pacakge bin::tpsgi;
  3. #ABSTRACT: PSGI application which simplifies migrating legacy/cgi applications to PSGI
  4. use strict;
  5. use warnings;
  6. use FindBin::libs;
  7. use TPSGI;
  8. my %options = main(@ARGV);
  9. =head1 USAGE
  10. tpsgi ... starman options
  11. tpsgi obeys a config file, ~/.tpsgi.ini which is in Config::Simple (key=value) format, with the keys being:
  12. verbose # Whether to print all log messages or not
  13. custom_log # Custom location for default (rotated) log
  14. routers # Router module(s), separate with comma
  15. indices # Dirindex files. In addition to index.html, index.htm, index.cgi
  16. loggers # Logger module(s), separate with comma
  17. auth # Authentication module
  18. domain # Domain name of the application, used by things like service files
  19. The idea is that this application is going to be run in a chroot with the user's homedir being the application dir.
  20. =cut
  21. sub main {
  22. my (@args) = @_;
  23. my %options = TPSGI::get_config();
  24. return %options;
  25. }
  26. our $app = sub {
  27. $options{verbose} = 1;
  28. my $self = TPSGI->new(%options);
  29. return eval { $self->app(@_) } || do {
  30. my $env = shift;
  31. $env->{'psgi.errors'}->print($@);
  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. };