5 nov 2013

Da HTML::Mason a Mason2... primi passi

Attenzione, questa pagina potrebbe contenere inesattezze: sono soltanto degli appunti su cui sto ancora lavorando!

Installazione Mason2

La nuova versione di HTML::Mason si chiama semplicemente Mason, ed è un sistema per la creazione di template e contenuti dinamici.

A differenza di HTML::Mason, la nuova versione si occupa di gestione pura dei template ed è stata resa indipendente dall'ambiente Web, la parte di integrazione con il server Web è invece che è realizzata dal framework Poet, tramite utilizza PSGI/Plack.

L'installazione di Poet si può fare in questo modo:

cpanm -S --notest Poet

e poiché Mason è un prerequisito, verrà installato anch'esso. cpanminus è un componente per la gestione di pacchetti presenti in CPAN.

Installiamo anche Mason::Plugin::PSGIHandler con il quale possiamo creare il nostro primo sito funzionante:

mkdir /var/wwwmason
mason_psgi_setup /var/wwwmason/firstapp/

ora per lanciare il nostro sito possiamo usare il seguente comando

cd /var/wwwmason/firstapp/; plackup -r

e il nostro applicativo sarà in ascolto su http://localhost:5000
se vogliamo configurare Apache per caricare il nostro sito, proviamo così:

<Location "/firstapp">
  SetHandler perl-script
  PerlResponseHandler Plack::Handler::Apache2
  PerlSetVar psgi_app  /var/wwwmason/firstapp/app.psgi
</Location>

attenzione che sembra convenga utilizzare plackup -r per lo sviluppo, mentre la soluzione su Apache va bene per i sistemi in produzione ma risulta difficoltoso ricaricare l'applicativo senza fare il restart di Apache: How do you deploy a PSGI script in Apache without restarting?

verificare anche i permessi della directory /var/wwwmason/firstapp/data dove Mason va a creare la cache ed i file precompilati.

9 gen 2013

Obtain name, type and precision for columns in DBI

I had to find the structure (name, type, and precision for every column) of a table, connected via JDBC using DBI, and this is how I did it:
#!/usr/bin/perl

use DBI;

my $host = '127.0.0.1';
my $url = 'jdbc:Cache://127.0.0.1/SOURCE';
my $dbo = DBI->connect("dbi:JDBC:hostname=$host;port=9001;url=$url", 'username', '***')
  or die $DBI::errstr;

my $qry = $dbo->prepare("select * from custom.table");

$qry->execute();

print "Structure of $table \n\n";

my $num_fields = $qry->{NUM_OF_FIELDS};

for (my $i=0; $i< $num_fields; $i++) {

  my $field = $qry->{NAME}->[$i];
  my $type = $qry->{TYPE}->[$i];
  my $precision = $qry->{PRECISION}->[$i];
  print "$field, $type, $precision\n";
}

$qry->finish();