Página 1 de 2

Mojolicius y mysql

NotaPublicado: 2017-11-13 02:14 @134
por memrobles
Hola, perleros. Buenas.

En Mojolicious, ¿alguien sabe cómo pasar un campo de una base de datos a mi página en general? He leído por horas y he encontrado esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Mojolicious::Lite;
  2. use Mojo::mysql;
  3.  
  4. helper mysql => sub { state $pg = Mojo::mysql->new('mysql://sri:s3cret@localhost/db') };
  5.  
  6. get '/' => sub {
  7.     my $c  = shift;
  8.     my $db = $c->mysql->db;
  9.     $c->render( json => $db->query('select now() as time')->hash );
  10. };
  11.  
  12. app->start;
  13.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

pero no sé cómo pasar el resultado a mi página web.

Esta es mi página:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Mojolicious::Lite;
  2.  
  3. get '/mipagina';
  4.  
  5. app->start;
  6. __DATA__
  7.  
  8. @@ mipagina.html.ep
  9. % title 'Green';
  10. % layout 'green';
  11. Hello World!
  12.  
  13. @@ layouts/green.html.ep
  14. <!DOCTYPE html>
  15. <html>
  16.   <head><title><%= title %></title></head>
  17.   <body><%= content %></body>
  18. </html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


He llegado a esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use Mojolicious::Lite;
  3. use Mojo::mysql;
  4.  
  5. helper mysql => sub { state $pg = Mojo::mysql->new('mysql://mysql://sri:s3cret@localhost/db') };
  6.  
  7. get '/index' => sub {
  8.     my $c  = shift;
  9.     my $db = $c->mysql->db;
  10.     $db->query('select now() as time')->hash;
  11. };
  12.  
  13. app->start;
  14.  
  15. __DATA__
  16.  
  17. @@ index.html.ep
  18. <!DOCTYPE html>
  19. <html>
  20.   <head><title><%= title %></title></head>
  21.   <body><%= $db %></body>
  22. </html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero no logro hacer que funcione. ¿Alguien me podría ayudar, por favor :)?

Re: Mojolicius y mysql

NotaPublicado: 2017-11-13 15:20 @681
por explorer
No estás llamando al método render(), que es justo el que crea la página y la manda al usuario.

Dentro de ese método debes indicar dónde está la plantilla. En tu caso la tienes incluida en el propio código, y la llamas index.html.ep.

Entonces, son dos movimientos los que tienes que hacer. El primero es recuperar la información de la consulta y pasarla a una estructura Perl. Fíjate que en el primer ejemplo se llama al método hash() después de hacer la consulta. El segundo movimiento es pasar esa estructura Perl a render(), para que muestre la página.

$c->render(template => 'index', format => 'html');

Si la estructura es muy compleja, o muy sencilla, puedes usar el método stash() para modificar el valor de las variables que usas en la plantilla.

Re: Mojolicius y mysql

NotaPublicado: 2017-11-13 20:39 @902
por memrobles
Gracias explorer.

Finalmente quedo a si funcionando.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.   use Mojolicious::Lite;
  3.   use Mojo::mysql;
  4.  
  5.   helper mysql =>
  6.     sub { state $pg = Mojo::mysql->new('mysql://sri:s3cret@localhost/db') };
  7.  
  8.   get '/index' => sub {
  9.     my $c  = shift;
  10.     my $db = $c->mysql->db;
  11.    my @result = $db->query('select now() as time')->hash;
  12.    return $c->render(template => 'index', result => @result );
  13.  
  14.   };
  15.  
  16. app->start;
  17.  
  18.  
  19. __DATA__
  20.  
  21. @@ index.html.ep
  22. <!DOCTYPE html>
  23. <html>
  24. <head><title><%= title %></title></head>
  25. <body><%= dumper $result %></body>
  26. </html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Mojolicius y mysql

NotaPublicado: 2017-11-13 20:48 @908
por memrobles
Otra manera de hacerlo es

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.   use Mojolicious::Lite;
  3.   use Mojo::mysql;
  4.  
  5.   helper mysql => sub {
  6.       state $pg = Mojo::mysql->new('mysql://sri:s3cret@localhost/db') };
  7.  
  8.   get '/index' => sub {
  9.     my $c  = shift;
  10.     my $db = $c->mysql->db;
  11.    return $c->render(template => 'index', db => $db );
  12.  
  13.   };
  14.  
  15. app->start;
  16.  
  17.  
  18. __DATA__
  19.  
  20. @@ index.html.ep
  21. <% my $result = $db->query('select now() as time')->hash; %>
  22. <!DOCTYPE html>
  23. <html>
  24. <head><title><%= title %></title></head>
  25. <body><%= dumper $result %></body>
  26. </html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Esto es divertido :D

Re: Mojolicius y mysql

NotaPublicado: 2017-11-14 01:10 @090
por memrobles
Buenas, pues ya no tan divertido, jeje :cry: .

Ahora me he dado cuenta que solo me trae el primer registro de la base de datos. A leer se ha dicho -_-
Slds

Re: Mojolicius y mysql

NotaPublicado: 2017-11-14 10:31 @480
por explorer
Con sistemas de plantillas más viejas, había que hacer un bucle para obtener todos los resultados, transformalos a código HTML, y eso es lo que se ponía en el receptáculo de la plantilla.

Yo... supongo... que con el sistema de plantillas actual pasará algo parecido porque Mojolicious no sabe cómo representar cada registro. Es decir, si le mando un array al receptáculo, ¿cómo sabe Mojolicious que debe representar cada elemento como una fila de una tabla?

Apuesto a que debe existir un módulo en Perl que hace algo parecido.

No, pero casi:
http://blogs.perl.org/users/joel_berger ... ample.html (en inglés)
https://connect.ed-diamond.com/GNU-Linu ... andler-3-3 (en francés)

Re: Mojolicius y mysql

NotaPublicado: 2017-11-14 20:16 @886
por memrobles
Hola, explorer. Al parecer hay que poner hashes en vez de hash.

https://metacpan.org/pod/Mojo::mysql::Results#hashes

Voy a probar y comento.

Slds y gracias :)

Re: Mojolicius y mysql

NotaPublicado: 2017-11-15 04:00 @208
por explorer
El método hash() te devuelve el siguiente registro del resultado de la consulta, mientras que el método hashes() devuelve todos los registros.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Procesa una fila cada vez
  2. while (my $siguiente = $resultados->hash) {
  3.   say $siguiente->{dinero};
  4. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Procesa todas las filas de una vez
  2. say $resultados->hashes->reduce(sub { $a->{dinero} + $b->{dinero} });
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Así que... puedes elegir el que te resulte más cómodo.

Re: Mojolicius y mysql

NotaPublicado: 2017-11-15 18:17 @803
por memrobles
Gracias, explorer, por tu atención.

Pero creo me pasaré a laravel/php o cgi/perl. Esto está muy difícil :cry:


Gracias y slds.

Re: Mojolicius y mysql

NotaPublicado: 2017-11-16 06:12 @300
por explorer
Cada uno suele usar las herramientas que conoce, si no tenemos tiempo para aprender nuevas y mejores herramientas.

Es lo que sucede, por ejemplo, con el módulo CGI, que ya no viene incluido con las distribuciones Perl, ya que genera código muy antiguo y difícil de mantener, comparado con el protocolo recomendado, el PSGI/Plack.

Aquí tienes alternativas a CGI: CGI::Alternatives

Mira la que opina la comunidad sobre CGI: https://youtu.be/7_r1gpTkFYo?t=300