2014-12-14 4 views
2

Я работаю на небольшом сервере для подачи страниц, содержащих данные, относящиеся к моей домашней автоматизации. У меня есть база данных, полная данных датчиков, которую я могу успешно запросить и вывести на графическое изображение, если я не буду комментировать раздел внизу. Я также могу заставить это печатать график при доступе к нему через браузер в качестве скрипта cgi, заменив код sqlite на созданные вручную out1 и out2, которые закомментированы около середины. Проблема заключается в попытке собрать все это вместе и просмотреть данные grabhed sqlite в виде скрипта cgi в браузере. Я сузил проблему до кода подключения. Когда я добавляю его в другой рабочий скрипт, вы не получаете изображения; но я знаю, что код подключения работает. Это должно быть что-то очевидное, но я просто не могу его найти. Мысли?GD: График не имеет выхода при подключении DBI.

#!/usr/bin/perl -w 
use CGI ':standard'; 
use DBI; 
use GD::Graph::lines; 
use strict; 

my $dbh = DBI->connect(   
    "dbi:SQLite:dbname=/root/distancetest", 
    "", 
    "", 
    { RaiseError => 1} 
) or die $!; 


my $sth = $dbh->prepare("SELECT * FROM distance"); 
$sth->execute(); 

my $row; 
my @data; 
my @out1; 
my @out2; 

while ($row = $sth->fetchrow_arrayref()) { 
    push(@out1, @$row[0]); 
    push(@out2, @$row[1]); 
} 
#@out1 = (1,2,3,4,5); 
#@out2 = (1,2,3,4,5); 

$data[0] = \@out1; 
$data[1] = \@out2; 

$sth->finish(); 
$dbh->disconnect(); 

my $skip = int ((@data * 8)/(600-50) + 1); 

my $mygraph = GD::Graph::lines->new(600, 300); 
$mygraph->set(
    x_label  => 'Timestamp', 
    y_label  => 'cm', 
    title  => 'Distance measuted at time', 
    line_types => [1], 
    line_width => 2, 
    x_labels_vertical => 1, 
    x_label_skip => $skip, 
    dclrs  => ['blue'], 
) or warn $mygraph->error; 

$mygraph->set_legend_font(GD::gdMediumBoldFont); 
$mygraph->set_legend('sensor1'); 
my $myimage = $mygraph->plot(\@data) or die $mygraph->error; 

print "Content-type: image/png\n\n"; 
#open(OUTPUT, ">$0.png") or die "Can't open $0.png: $!\n"; 
#print OUTPUT $myimage->png(); 
print $myimage->png; 
+0

Что вы имеете в своем журнале ошибок? Также вы можете попробовать добавить 'use CGI :: Carp qw (fatalsToBrowser);' посмотреть, что случилось. Проблема не связана с DBI или GD :: Graph, а вместо этого - с файловой системой. – gangabass

+0

Хм, я искал способ заставить его печатать ошибки. Благодарю. Как и ожидалось, он говорит, что он не может открыть базу данных. Ничего кроме этого не происходит. Все настроено как принадлежащее root, и я полагаю, что lighttpd имеет более низкий доступ. Я начну искать там. Что касается журнала ошибок; Я все еще нахожу свой путь. Я просто переустановил arch на pogoplug, и теперь он использует systemd. Новые воды. – pete1450

+0

Это действительно было так просто. Я установил/srv/http, принадлежащий http (и переместил базу данных из корневого дома), и он отлично работает. Я новичок в задании вопроса, но я предполагаю, что если вы опубликуете ответ, я могу дать вам кредит. – pete1450

ответ

0

Чтобы найти то, что случилось с вашим кодом вы можете добавить эту строку:

use CGI::Carp qw(fatalsToBrowser);