Frage

Nach Dancer Tutorial hier:

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

Ich bin meine eigene sqlite3 Datenbank mit diesem Schema mit

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

Meine Tänzer Code (helloWorld.pm) für die Datenbank:

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;

Versuchte das Beispiel Vorlage auf der Website, funktioniert nicht.

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

Erzeugt Seite, aber ohne Daten. Wie behebe ich das, da keine Anhaltspunkte kommen in der Konsole / cli?

* UPDATE * Wenn ich den Datenbank-Code, um diese Änderung:

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

Ich bekomme ein Ergebnis aus der Tabelle in der Vorlage. So die Info wird vergangen, aber die Syntax für die Vorlage funktioniert nicht wie beschrieben. Das paßt mit Template Toolkit-Syntax.

Danke

Bubnoff

EDIT / RESOLUTION **

David erinnerte mich an Data :: Dumper, das bestätigt, dass das Problem war in der Tat mit der Template-Konfiguration. Ich kommentierte die Vorlage-Direktive in der Konfigurationsdatei denkt, dass es überflüssig wäre, da es in dem Code selbst war. FALSCH!!! Es muss in der YAML konfiguriert werden. Löschen ein Rautenzeichen in dem Config-Set aller Rechte. Jetzt bin ich verlegen fast nicht Data :: Dumper in erster Linie versuchen. Dank David!

War es hilfreich?

Lösung

Zunächst einmal sicherstellen, dass Sie vorbei, was Sie denken, Sie vorbei sind an der Vorlage.

Weisen Sie das Ergebnis von $ sth-> fetchall_hashref ($ key_field) in einen temporären Skalar, dann werfen Sie es mit Data :: Dump oder Data :: Dumper (oder finden Sie unter Dancer :: Plugin :: DebugDump für einen Weg, es tot leicht) zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top