2012-01-11 6 views
0

私はstarmanを備えたplackupの下でWebアプリケーションを実行しており、ユーザーの要求に基づいてパッケージを動的にロードしてインスタンス化しようとしています。私は 'require $ packageName;'を使用しています。 $ packageNameにパッケージの名前が含まれているパッケージをロードするには、その名前が設定ファイルに格納されます。次に、すべてのクラスが基本クラスから継承し、一連の既知のメソッドを含むので、インスタンス上で既知のコマンドセットを実行します。Starmanでプランクアップされた動的パッケージのロード

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

誰でもこの問題が発生しますか? Starman内の他のパスを更新する必要がありますか?私は-Iフラグを付けてplackupを実行しています。私の環境PERL5LIB変数も更新しています。私はまた、メインのアプリケーションクラスで'use lib /...'を試しましたが、これらのどれも動作しません。彼らは裸の単語として指定しているときに

おかげ

+0

例を参照してください: 'スターマン-e'my $パッケージ= "テンプレート"; $ packageが必要です。私の$ t = $ package-> new; return [200、["Content-Type" => "text/plain"]、["ok"]; '' – daxim

+0

これはうまくいかないことの例です。 – MadHacker

+0

eval "use $ package";トリックをした – MadHacker

答えて

1

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

Check the list of module installed in machine

関連する問題