Как я осуществляю рефакторинг код Perl, который использует Шаблонный Инструментарий с DBI для использования в своих интересах FastCGI?

Просто вычтите из позиции курсора левую и верхнюю координаты элемента управления:

this.Text = Convert.ToString(
    Cursor.Position.X - this.Left + ":" +
    Cursor.Position.Y - this.Top);
5
задан 3 revs 4 June 2009 в 09:19
поделиться

3 ответа

Если вы знакомы с CGI.pm, нет смысла использовать FCGI.pm, используйте CGI :: Fast.

Ваш пример, преобразованный для использования CGI :: Fast, будет следующим: :

#!/usr/bin/perl
use strict;
use CGI::Fast;
use DBI;
use Template;

my $driver   = "mysql";
my $server   = "localhost:3306";
my $database = "test";
my $url      = "DBI:$driver:$database:$server";
my $user     = "apache";
my $password = "";

#Connect to database
my $db_handle = DBI->connect( $url, $user, $password ) or die $DBI::errstr;

while ( my $cgi = CGI::Fast->new() ) {

    #Grab submitted form data
    my $idFromSomewhere = $cgi->param( 'id' );

    #SQL query to execute
    my $sql = "SELECT * FROM tests WHERE id=?";

    #Prepare SQL query
    my $statement = $db_handle->prepare( $sql )
        or die "Couldn't prepare query '$sql': $DBI::errstr\n";

    #Execute SQL Query
    $statement->execute( $idFromSomewhere )
        or die "Couldn't execute query '$sql': $DBI::errstr\n";

    #Get query results as hash
    my $results = $statement->fetchall_hashref( 'id' );

    my $tt = Template->new();

    #HTML output template
    my $input = 'template.html';
    my $vars = { tests => $results, };

    #Process template and output as HTML
    $tt->process( $input, $vars )
        or die $tt->error();
}

Что касается ваших дополнительных вопросов:

  • A: Не используйте FCGI, если вы не уверены на 100%, что знаете, что делаете. Вам определенно нужен CGI :: Fast :)
  • B: Я бы реорганизовал его для удобства чтения
  • C: если вы используете DBI-> connect перед тем, как принять соединение, вы получите постоянное соединение с базой данных, что отлично с точки зрения производительности
  • D: определенно внутри.

Также как дополнительная информация - если вы хотите разрабатывать веб-сайты на Perl, хотя бы взгляните на Catalyst ( http://www.catalystframework.org/ )

10
ответ дан 13 December 2019 в 19:34
поделиться

Если вы хотите использовать FCGI, то выполняйте в этом цикле только минимум, чтобы запустить задачу. Все остальное должно находиться в модулях, и все, что вам нужно сделать, это передать ввод.

use FCGI;
while (FCGI::accept >= 0)
    {    
    MyApplication->activate( @args );
    }

Остальное где-то в MyApplication. В скрипте FastCGI не должно быть ничего интересного. Вы не можете тесно связать все, что связано с приложением, с тем, что его активирует.

Возможно, вам захочется прочитать мою главу о модулях в Освоение Perl , чтобы увидеть, как вы можете превратить свои скрипты в новые. -используемые модули. Подобные вещи очень упрощают подобные вещи.

Для постоянных соединений с базой данных у вас есть немного больше работы. Вы можете запустить соединение вне цикла, но периодически вам нужно его пропинговать и, возможно, восстановить его. Посмотрите, что Apache ::

1
ответ дан 13 December 2019 в 19:34
поделиться

Подзапрос C: (постоянные соединения с БД)

Взгляните на DBI-> connect_cached () . Я считаю, что вы можете использовать его внутри вашего цикла CGI :: Fast, и DBI.pm запомнит / кэширует ваше соединение. Таким образом, при 2-м, 3-м и т. Д. Вызовах connect_cached () с теми же параметрами вы вернетесь к существующему соединению. Он создаст новое соединение, если старое больше не доступно.

Что действительно хорошо в этом подходе, так это то, что единственное изменение, которое вам нужно внести в существующее приложение (кроме добавления цикла CGI :: Fast), - это замените connect () на connect_cached (). И connect_cached () также будет работать с обычным CGI.

См. Также Должен ли я помещать соединение / инициализацию БД вне цикла FCGI, чтобы воспользоваться преимуществами FastCGI в Perl? а также http://www.mail-archive.com/ cgiapp@lists.erlbaum.net /msg04351.html

0
ответ дан 13 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: