使用Starman在plackup下加载动态包

时间:2012-01-11 01:43:43

标签: perl psgi starman

我正在使用starman在plackup下运行一个Web应用程序,并尝试根据用户请求动态加载和实例化包。我正在使用'要求$ packageName;'要加载包,其中$ packageName包含包的名称,名称存储在配置文件中。然后,我在实例上执行一组已知的命令,因为所有类都继承自基类并包含一组已知方法。

这在Apache下工作正常,但由于某种原因,即使@INC包含库路径并且包名称是lib路径中最后一个目录的绝对包,plackup也说它找不到包。也就是说,包名称将是Base :: My :: Package。

有人遇到过这个问题吗?我是否需要更新Starman中的其他路径?我正在使用-I标志执行plackup以及更新我的环境PERL5LIB变量。我还在主应用类中尝试了'use lib /...',但这些都不起作用。

由于

1 个答案:

答案 0 :(得分:1)

require只会在指定为裸字时接受模块名称(例如Scalar :: Util)。如果给require一个字符串,那么它需要是模块的相对路径(例如Scalar / Util.pm)。您可以通过在requireeval的字符串参数形式)中执行eval来解决此问题,例如eval "require $package"

请参阅Check the list of module installed in machine