[Mojolicious] Re: Need help with stashing data and retrieving it in the template
Thank you Dan. I will work on adjusting the error handling as suggested. This is the first time I've done any async and for me it's a bit confusing and has a stepper learning curve than the Dancer apps that I've done. -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com. To post to this group, send email to mojolicious@googlegroups.com. Visit this group at https://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.
[Mojolicious] Re: Need help with stashing data and retrieving it in the template
Stefan, Thanks for the link. I've previously read that post but will need to read it again. Dan, I figured out what was causing that last error. I forgot to load use Mojo::Util 'trim'; The script is now working correctly. Now I need to work on adding error checking/handling for cases where the url is unreachable. -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com. To post to this group, send email to mojolicious@googlegroups.com. Visit this group at https://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.
[Mojolicious] Re: Need help with stashing data and retrieving it in the template
Dan, thank you for your input. I haven't looked at promises much but I was under the impression (based on some of Joel Berger's examples as well as one or two other key mojolicious developers) that delays were supposed to be cleaner and more desirable. I knew about the issue with the for loop initialization. Using the correct loop gave me a 500 error so I temporarily "broke" that while troubleshooting the passing of the data via the dumper helper. I corrected that loop and swapped in your code but it is giving a "Premature connection close" error. $ morbo ./titles_promise.pl Server available at http://127.0.0.1:3000 [Thu Feb 7 11:02:35 2019] [debug] GET "/titles" (604f6be1) [Thu Feb 7 11:02:35 2019] [debug] Routing to a callback [Thu Feb 7 11:02:35 2019] [error] Premature connection close [Thu Feb 7 11:02:35 2019] [debug] Template "exception.development.html.ep" not found [Thu Feb 7 11:02:35 2019] [debug] Template "exception.html.ep" not found [Thu Feb 7 11:02:35 2019] [debug] Rendering template "mojo/debug.html.ep" [Thu Feb 7 11:02:35 2019] [debug] Rendering template "mojo/menubar.html.ep" [Thu Feb 7 11:02:35 2019] [debug] Your secret passphrase needs to be changed [Thu Feb 7 11:02:35 2019] [debug] 500 Internal Server Error (0.028391s, 35.222/s) Thinking that it might be due to a scoping issue with $ua, I moved that out to have file scope, but then it produced this error: Use of inherited AUTOLOAD for non-method Mojo::Server::Sandbox:: b205866ab9c46b3f8105929c8a269a25::trim() is deprecated. This will be fatal in Perl 5.28 at /home/rkb/test/titles_promise.pl line 23. [Thu Feb 7 11:19:23 2019] [error] Undefined subroutine &Mojo::Server:: Sandbox::b205866ab9c46b3f8105929c8a269a25::trim called at /usr/local/share/ perl/5.26.1/Mojo/Promise.pm line 123. On Thursday, February 7, 2019 at 9:48:20 AM UTC-8, Ron Bergin wrote: > > I'm brand new to Mojolicious and working on a lite script that goes to 75 > urls and retrieves text in an h3 tag. I've worked up a working test script > that outputs to console and now I'm working on adjusting it to be a web app > but I can't seem to get the correct syntax to store/retrieve the data. > What am I doing wrong? > > #!/usr/bin/perl > > use Mojolicious::Lite; > > my @urls = ( > 'https://mojolicious.org', > 'https://metacpan.org', > 'https://perlmonks.org', > 'http://www.google.com', > ); > > get '/titles' => sub { > my $ua= Mojo::UserAgent->new; > my $async = Mojo::IOLoop::Delay->new; > > $async->steps( > sub { > my $self = shift; > $ua->get($_, $self->begin) for @urls; > }, > sub { > my ($self, @tx) = @_; > my $titles = []; > > foreach (@tx) { > my $title = ''; > my $status = $_->res->is_success ? 'Connected' : $_->error > ->{message}; > > if ( $_->res->is_success ) { > $title = $_->res->dom->at('title')->text; > $title =~ s/^\s+|\s+$//g; # couldn't get Mojo::Util > trim function to work > } > > push @$titles, {host => $_->req->url->host, status => > $status, title => $title}; > } > $self->stash(titles => $titles); > } > ); > } => 'titles'; > > app->start; > > __DATA__ > > @@ titles.html.ep > % layout 'titles'; > > %= dumper stash('titles') > > > > Host > Status > Title > > > > % for my $server ( stash('titles') ) { > > <%= $server->{host} %> > <%= $server->{status} %> > <%= $server->{title} =%> > > % } > > > @@ layouts/titles.html.ep > > > > > > Titles > > > > Titles > <%= content =%> > > > > > > Here's the output: > >> $ ./titles_web.pl get /titles >> [Thu Feb 7 09:45:54 2019] [debug] GET "/titles" (fcf21ce8) >> [Thu Feb 7 09:45:54 2019] [debug] Routing to a callback >> [Thu Feb 7 09:45:54 2019] [debug] Rendering template "titles.html.ep" >> from DATA section >> [Thu Feb 7 09:45:54 2019] [debug] Rendering template >> "layouts/titles.html.ep" from DATA section >> [Thu Feb 7 09:45:54 2019] [debug] 200 OK (0.00267s, 374.532/s) >> >> >> >> >> >> Titles >> >> >> >> Titles >> >> undef >> >> >> >> >> Host >> Status >> Title >> >> >> >> >> >> >> >> >> >> >> >> >> > > -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com. To post to this group, send email to mojolicious@googlegroups.com. Visit this group at https://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.
[Mojolicious] Re: Need help with stashing data and retrieving it in the template
Note: I cross posted this question on perlmonks https://perlmonks.org/?node_id=1229558 On Thursday, February 7, 2019 at 9:48:20 AM UTC-8, Ron Bergin wrote: > > I'm brand new to Mojolicious and working on a lite script that goes to 75 > urls and retrieves text in an h3 tag. I've worked up a working test script > that outputs to console and now I'm working on adjusting it to be a web app > but I can't seem to get the correct syntax to store/retrieve the data. > What am I doing wrong? > > #!/usr/bin/perl > > use Mojolicious::Lite; > > my @urls = ( > 'https://mojolicious.org', > 'https://metacpan.org', > 'https://perlmonks.org', > 'http://www.google.com', > ); > > get '/titles' => sub { > my $ua= Mojo::UserAgent->new; > my $async = Mojo::IOLoop::Delay->new; > > $async->steps( > sub { > my $self = shift; > $ua->get($_, $self->begin) for @urls; > }, > sub { > my ($self, @tx) = @_; > my $titles = []; > > foreach (@tx) { > my $title = ''; > my $status = $_->res->is_success ? 'Connected' : $_->error > ->{message}; > > if ( $_->res->is_success ) { > $title = $_->res->dom->at('title')->text; > $title =~ s/^\s+|\s+$//g; # couldn't get Mojo::Util > trim function to work > } > > push @$titles, {host => $_->req->url->host, status => > $status, title => $title}; > } > $self->stash(titles => $titles); > } > ); > } => 'titles'; > > app->start; > > __DATA__ > > @@ titles.html.ep > % layout 'titles'; > > %= dumper stash('titles') > > > > Host > Status > Title > > > > % for my $server ( stash('titles') ) { > > <%= $server->{host} %> > <%= $server->{status} %> > <%= $server->{title} =%> > > % } > > > @@ layouts/titles.html.ep > > > > > > Titles > > > > Titles > <%= content =%> > > > > > > Here's the output: > >> $ ./titles_web.pl get /titles >> [Thu Feb 7 09:45:54 2019] [debug] GET "/titles" (fcf21ce8) >> [Thu Feb 7 09:45:54 2019] [debug] Routing to a callback >> [Thu Feb 7 09:45:54 2019] [debug] Rendering template "titles.html.ep" >> from DATA section >> [Thu Feb 7 09:45:54 2019] [debug] Rendering template >> "layouts/titles.html.ep" from DATA section >> [Thu Feb 7 09:45:54 2019] [debug] 200 OK (0.00267s, 374.532/s) >> >> >> >> >> >> Titles >> >> >> >> Titles >> >> undef >> >> >> >> >> Host >> Status >> Title >> >> >> >> >> >> >> >> >> >> >> >> >> > > -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com. To post to this group, send email to mojolicious@googlegroups.com. Visit this group at https://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.
[Mojolicious] Need help with stashing data and retrieving it in the template
I'm brand new to Mojolicious and working on a lite script that goes to 75 urls and retrieves text in an h3 tag. I've worked up a working test script that outputs to console and now I'm working on adjusting it to be a web app but I can't seem to get the correct syntax to store/retrieve the data. What am I doing wrong? #!/usr/bin/perl use Mojolicious::Lite; my @urls = ( 'https://mojolicious.org', 'https://metacpan.org', 'https://perlmonks.org', 'http://www.google.com', ); get '/titles' => sub { my $ua= Mojo::UserAgent->new; my $async = Mojo::IOLoop::Delay->new; $async->steps( sub { my $self = shift; $ua->get($_, $self->begin) for @urls; }, sub { my ($self, @tx) = @_; my $titles = []; foreach (@tx) { my $title = ''; my $status = $_->res->is_success ? 'Connected' : $_->error ->{message}; if ( $_->res->is_success ) { $title = $_->res->dom->at('title')->text; $title =~ s/^\s+|\s+$//g; # couldn't get Mojo::Util trim function to work } push @$titles, {host => $_->req->url->host, status => $status, title => $title}; } $self->stash(titles => $titles); } ); } => 'titles'; app->start; __DATA__ @@ titles.html.ep % layout 'titles'; %= dumper stash('titles') Host Status Title % for my $server ( stash('titles') ) { <%= $server->{host} %> <%= $server->{status} %> <%= $server->{title} =%> % } @@ layouts/titles.html.ep Titles Titles <%= content =%> Here's the output: > $ ./titles_web.pl get /titles > [Thu Feb 7 09:45:54 2019] [debug] GET "/titles" (fcf21ce8) > [Thu Feb 7 09:45:54 2019] [debug] Routing to a callback > [Thu Feb 7 09:45:54 2019] [debug] Rendering template "titles.html.ep" > from DATA section > [Thu Feb 7 09:45:54 2019] [debug] Rendering template > "layouts/titles.html.ep" from DATA section > [Thu Feb 7 09:45:54 2019] [debug] 200 OK (0.00267s, 374.532/s) > > > > > > Titles > > > > Titles > > undef > > > > > Host > Status > Title > > > > > > > > > > > > > -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com. To post to this group, send email to mojolicious@googlegroups.com. Visit this group at https://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.