私はstarmanを備えたplackupの下でWebアプリケーションを実行しており、ユーザーの要求に基づいてパッケージを動的にロードしてインスタンス化しようとしています。私は 'require $ packageName;'を使用しています。 $ packageNameにパッケージの名前が含まれているパッケージをロードするには、その名前が設定ファイルに格納されます。次に、すべてのクラスが基本クラスから継承し、一連の既知のメソッドを含むので、インスタンス上で既知のコマンドセットを実行します。Starmanでプランクアップされた動的パッケージのロード
これはApacheでもうまくいきますが、@INCにライブラリパスが含まれていて、パッケージ名がlibパスの最後のディレクトリの絶対パスであってもパッケージを見つけることができないと言っています。つまり、パッケージ名はBase :: My :: Packageになります。
誰でもこの問題が発生しますか? Starman内の他のパスを更新する必要がありますか?私は-Iフラグを付けてplackupを実行しています。私の環境PERL5LIB変数も更新しています。私はまた、メインのアプリケーションクラスで'use lib /...'
を試しましたが、これらのどれも動作しません。彼らは裸の単語として指定しているときに
おかげ
例を参照してください: 'スターマン-e'my $パッケージ= "テンプレート"; $ packageが必要です。私の$ t = $ package-> new; return [200、["Content-Type" => "text/plain"]、["ok"]; '' – daxim
これはうまくいかないことの例です。 – MadHacker
eval "use $ package";トリックをした – MadHacker