Pregunta

Tras bailarín tutorial aquí:

http://search.cpan.org/dist/Dancer/ lib / Bailarín / Tutorial.pod

Estoy usando mi propia base de datos sqlite3 con este esquema

CREATE TABLE if not exists location (location_code TEXT PRIMARY KEY, name TEXT, stations INTEGER);
CREATE TABLE if not exists session (id INTEGER PRIMARY KEY, date TEXT, sessions INTEGER, location_code TEXT, FOREIGN KEY(location_code) REFERENCES location(location_code));

Mi código bailarina (helloWorld.pm) para la base de datos:

package helloWorld;
use Dancer;
use DBI;
use File::Spec;
use File::Slurp;
use Template;

our $VERSION = '0.1';

set 'template' => 'template_toolkit';
set 'logger'   => 'console';

my $base_dir = qq(/home/automation/scripts/Area51/perl/dancer);

# database crap
sub connect_db {
 my $db = qw(/home/automation/scripts/Area51/perl/dancer/sessions.sqlite);
 my $dbh = DBI->connect("dbi:SQLite:dbname=$db", "", "",
   { RaiseError => 1, AutoCommit => 1 });
 return $dbh;
}

    sub init_db {
 my $db = connect_db();
 my $file = qq($base_dir/schema.sql);
 my $schema = read_file($file);
 $db->do($schema) or die $db->errstr;
    }

get '/' => sub {
 my $branch_code = qq(BPT);
 my $dbh = connect_db();
 my $sql = q(SELECT * FROM session);
 my $sth = $dbh->prepare($sql) or die $dbh->errstr;
 $sth->execute or die $dbh->errstr;
 my $key_field = q(id);
 template 'show_entries.tt', {
  'branch' => $branch_code,
  'data' => $sth->fetchall_hashref($key_field),
 };
};

init_db();
true;

Probamos el ejemplo de plantilla en el sitio, no funciona.

<% FOREACH id IN data.keys.nsort %>
  <li>Date is: <% data.$id.sessions %> </li>
<% END %>

Produce página, pero sin datos. ¿Cómo soluciono esto como no hay pistas surgido en la consola / CLI?

* ACTUALIZACIÓN * Si cambio el código de base de datos para esto:

get '/' => sub {
    my $branch_code = qq(BPT);
    my $dbh = connect_db();
    my $sql = 'SELECT * FROM session';
    #my $sth = $dbh->prepare($sql) or die $dbh->errstr;
    #$sth->execute or die $dbh->errstr;
    #my $key_field = q(id);
    my $entries = $dbh->selectall_arrayref($sql,{});
    template 'show_entries.tt', {


'branch' => $branch_code,
        #'data' => $sth->fetchall_hashref('id'),
        'data' => @$entries,
    };
};

Me conseguir un resultado de la mesa en la plantilla. Por lo que la información se está pasando, pero el sintaxis de la plantilla no funciona como se describe. Esto hace ajuste con sintaxis de la plantilla Toolkit.

Gracias

Bubnoff

EDIT / RESOLUCIÓN **

David me recordó de datos :: Dumper, que confirmó que el problema era de hecho con la configuración de la plantilla. Comenté a cabo la directiva de plantilla en el pensamiento archivo de configuración que sería redundante ya que estaba en el propio código. ¡¡¡INCORRECTO!!! Se debe configurar en el YAML. La eliminación de una octothorpe en el conjunto de configuración a todo lo derechos. Ahora estoy avergonzado por no tratar de datos :: Dumper en el primer lugar. Gracias David!

¿Fue útil?

Solución

En primer lugar, asegurarse de que está pasando lo que usted piensa que está pasando a la plantilla.

Asignar el resultado de $ sth-> fetchall_hashref ($ key_field) a un escalar temporal, a continuación, lo descarga con datos :: volcado o Data :: Dumper (o ver bailarina :: Plugin :: DebugDump una manera para que sea fácil de muertos).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top