1

はじめに

  • Ubuntu デスクトップで mason をセットアップしようとしました。
  • これは非常に単純なセットアップですが、masonbook.com と mansonhq.com の一部を読んだ後も、まだ問題がありました。
  • 誰かが私にヒントをくれることを願っています。詳しくは下記をご覧ください。

ローカルサーバー

  • Ubuntu 11.04 デスクトップ
  • Mason 1.44 (Ubuntu に付属)
  • perl/mason の初心者

ファイル

  • mason.seedy2 - CGI スクリプトです。基本的には、グローバル変数 --> $user を設定します。index1.htmlで使いたい
  • index1.html - シンプルな html ファイル
  • apache.conf - 正しく実行したかどうかわかりません

エラー

1. ブラウザに http://localhost:81/index1.html と入力します

2.

error: /var/www/test/sj3/public_html/index1.html のコンパイル中にエラーが発生しました:
グローバル シンボル「$user」には、/var/www/test/sj3/public_html/index1.html 行 2 で明示的なパッケージ名が必要です。

環境:    
1:      

2: 3:

4: コード スタック: /usr/share/perl5/HTML/Mason/Interp.pm:450 /usr/share/perl5/HTML/メイソン/Request.pm:249 /usr/share/perl5/HTML/メイソン/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 (評価 34):8 -e:0

apache.conf

# 他のポートをリッスンする
聞く 81



    ServerAdmin webmaster@localhost
    ドキュメントルート /var/www/test/sj3/public_html                                             

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

    アクション html-mason /cgi-bin/mason.speedy2
     
            SetHandler perl スクリプト
            PerlHandler HTML::Mason::ApacheHandler
    

index1.html

%user を印刷

メイソン.スピーディ2

#!/usr/bin/perl -w

厳密に使用します。
HTML::Mason::CGIHandler を使用します。

{
    私たちの ($user, %session);
    $user = "bla";
}

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

$h->handle_request;
4

2 に答える 2

2

サイト全体のグローバルが必要な場合は、apacheハンドラーでallow_globalsを使用して宣言し、ルートレベルのオートハンドラーで初期化します。

于 2011-06-16T15:43:15.033 に答える
0
  1. print %user はタイプミスです。$user である必要があります。

  2. daotoad の提案は良いですが、既存のコードを変更するにはしばらく時間がかかります

  3. 前のプログラマーは、すべてのグローバル変数とパッケージを含む "/cgi-bin/mason.speedy2" を持っていて、/cgi-bin/mason.speedy2 を apache.conf に埋め込みます (つまり、autohandler でそれらを宣言するのと似ています)。4. 私の質問: /cgi-bin/mason.speedy2 は実行されていますか? 実行中の場合、グローバル変数 $user が定義されていないのはなぜですか?

于 2011-06-17T01:58:00.653 に答える