【问题标题】:Dynamic package loading under plackup with Starman使用 Starman 进行动态包加载
【发布时间】:2012-01-11 01:43:43
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 示例:starman -e'my $package = "Template"; require $package; my $t = $package->new; return [200, ["Content-Type" => "text/plain"], ["ok"]];'
  • 这或多或少是一个不起作用的例子。
  • eval "使用 $package";成功了
  • @MadHacker:我的回答对你有帮助吗?

标签: perl psgi starman


【解决方案1】:

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

Check the list of module installed in machine

【讨论】:

    猜你喜欢
    • 2014-08-29
    • 2016-01-17
    • 2015-08-26
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多