0

starman を使用して plackup で Web アプリを実行しており、ユーザーの要求に基づいてパッケージを動的に読み込んでインスタンス化しようとしています。「require $packageName;」を使用しています $packageName にパッケージの名前が含まれるパッケージをロードするには、名前が構成ファイルに保存されます。次に、すべてのクラスが基本クラスから継承され、一連の既知のメソッドが含まれているため、インスタンスで既知の一連のコマンドを実行します。

これは Apache では問題なく動作しますが、何らかの理由で、@INC にライブラリ パスが含まれていて、パッケージ名が lib パスの最後のディレクトリからの絶対パスであるにもかかわらず、plackup がパッケージを見つけることができないと言っています。つまり、パッケージ名は Base::My::Package になります。

誰でもこの問題が発生しますか? Starman 内の他のパスを更新する必要がありますか? -I フラグを指定して plackup を実行し、環境の PERL5LIB 変数を更新しています。'use lib /...'メインアプリクラスでも試しましたが、どれも機能しません。

ありがとう

4

1 に答える 1

1

requireモジュール名 (例: Scalar::Util) がベアワードとして指定されている場合のみ受け入れます。文字列を指定する場合はrequire、モジュールへの相対パスである必要があります (例: Scalar/Util.pm)。これを回避するにはrequire、 an eval( の文字列パラメータ形式eval) 内を実行します。たとえば、eval "require $package".

マシンにインストールされているモジュールのリストを確認するを参照してください

于 2012-02-11T18:48:55.683 に答える