#!/usr/bin/env perl # Minor modifications to starman to support autoreload of code without Plack::Loader::Restarter. use strict; use FindBin::libs; use Plack::Runner; use File::Basename qw{dirname}; use TPSGI::Startup; sub version { require Starman; print "Starman $Starman::VERSION\n"; } # Setup the watcher for changes # This has to be setup at global server start rather than app start per worker. # This is preferable to using -R (Plack::Loader::Restarter, see notes in orig starman) my %options = TPSGI::Startup::get_config(); my @dirs = ("$options{tpsgi_dir}/lib"); foreach my $route (@{$options{routers}}) { push(@dirs, dirname("$options{tpsgi_dir}/$route")); } TPSGI::Startup::watch_for_changes(@dirs); my $preload_app; require Getopt::Long; Getopt::Long::Configure("no_ignore_case", "no_auto_abbrev", "pass_through"); Getopt::Long::GetOptions( "preload-app" => \$preload_app, ); my @args = (server => 'Starman', env => 'deployment', version_cb => \&version); if (!$preload_app) { push @args, 'loader' => 'Delayed'; } my @argv = @ARGV; my $runner = Plack::Runner->new(@args); $runner->parse_options(@argv); $runner->set_options(argv => \@argv); $runner->run;