Как определить глобальную переменную с помощью Mason - PullRequest
1 голос
/ 16 июня 2011

Intro

  • Я пытался настроить масон на своем рабочем столе Ubuntu.
  • Это очень простая настройка, но у меня все еще были проблемы после чтения частей masonbook.com & mansonhq.com
  • Я надеюсь, что кто-то может дать мне подсказку.Пожалуйста, смотрите ниже для более подробной информации.

Локальный сервер

  • Рабочий стол Ubuntu 11.04
  • Мейсон 1.44 (поставляется с Ubuntu)
  • Новичок в perl /mason

Файлы

  • mason.seedy2 - это скрипт cgi.По сути, я установил глобальную переменную -> $ user.Я хочу использовать его в index1.html
  • index1.html - простой HTML-файл
  • apache.conf - я не уверен, что сделал все правильно

Ошибка


1. type http://localhost:81/index1.html in browser

2.

error:      Error during compilation of /var/www/test/sj3/public_html/index1.html:
Global symbol "$user" requires explicit package name at /var/www/test/sj3/public_html/index1.html line 2.

context:    
1:      <p>
2:      
3:      </p>
4:      
code stack:     /usr/share/perl5/HTML/Mason/Interp.pm:450
/usr/share/perl5/HTML/Mason/Request.pm:249
/usr/share/perl5/HTML/Mason/Request.pm:212
/usr/share/perl5/HTML/Mason/ApacheHandler.pm:94
/usr/share/perl5/Class/Container.pm:275
/usr/share/perl5/Class/Container.pm:353
/usr/share/perl5/HTML/Mason/Interp.pm:348
/usr/share/perl5/HTML/Mason/ApacheHandler.pm:874
/usr/share/perl5/HTML/Mason/ApacheHandler.pm:828
(eval 34):8
-e:0

apache.conf

# Listen to other ports
Listen 81



    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/test/sj3/public_html                                             

    PerlSetVar  MasonCompRoot    /var/www/test/sj3/public_html/
    PerlSetVar  MasonDataDir     /var/www/test/sj3/mason/

    Action html-mason /cgi-bin/mason.speedy2
     
            SetHandler   perl-script
            PerlHandler  HTML::Mason::ApacheHandler
    

index1.html

print %user

mason.speedy2

#!/usr/bin/perl -w

use strict;
use HTML::Mason::CGIHandler;

{
    our($user, %session);
    $user = "bla";
}

my $h = HTML::Mason::CGIHandler->new
(
    data_dir  => "$ENV{DOCUMENT_ROOT}/../mason",
    allow_globals => [qw(%session $user)],
);

$h->handle_request;

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Если у вас должны быть глобальные переменные всего сайта , вы объявляете их с allow_globals в обработчике apache и инициализируете их в корневом уровне autohandler .

0 голосов
/ 17 июня 2011
  1. print% user - опечатка.Это должен быть пользователь $.

  2. предложение daotoad хорошо, но мне потребуется некоторое время, чтобы изменить существующие коды

  3. Предыдущий программист имеет "/ cgi-bin/mason.speedy2 "содержит все глобальные переменные и пакет, затем встраивает /cgi-bin/mason.speedy2 в apache.conf (то есть аналогично объявлению их в автообработчике).4. Мой вопрос: работает /cgi-bin/mason.speedy2?Если он работает, почему глобальная переменная $ user не определена?

...