Domanda

A seguito Dancer tutorial qui:

http://search.cpan.org/dist/Dancer/ lib / ballerino / Tutorial.pod

Sto usando il mio proprio database sqlite3 con questo schema

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));

Il mio codice ballerino (helloWorld.pm) per il database:

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;

Abbiamo provato il modello di esempio sul sito, non funziona.

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

Produce pagina, ma senza dati. Come risolve questo come nessun indizio venire nella console / cli?

* UPDATE * Se cambio il codice del database a questo:

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,
    };
};

ottengo un risultato dalla tabella nel modello. Così le informazioni viene passato, ma la sintassi per il modello non funziona come descritto. Questo fa in forma con la sintassi Template Toolkit.

Grazie

Bubnoff

Modifica / RISOLUZIONE **

David mi ha ricordato Data :: Dumper che ha confermato che il problema era effettivamente con la configurazione del modello. Ho commentato la direttiva modello nel pensiero file di configurazione che sarebbe superfluo dato che era nel codice stesso. SBAGLIATO!!! Si deve essere configurato in YAML. L'eliminazione di un cancelletto in tutto set di configurazione per i diritti. Ora sto solo in imbarazzo per non provare Data :: Dumper, in primo luogo. Grazie David!

È stato utile?

Soluzione

Prima di tutto, assicurarsi che si sta passando quello che si pensa sta passando al modello.

assegnare il risultato di $ sth-> fetchall_hashref ($ key_field) per uno scalare temporanea, poi discarica con dati :: Dump o Data :: Dumper (o vedere Dancer :: :: Plugin DebugDump di un modo per rendere più facile morti).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top