【问题标题】:WebApp ignores patched perl pm fileWebApp 忽略修补的 perl pm 文件
【发布时间】:2010-12-21 06:55:35
【问题描述】:

我以前从未真正接触过 perl,所以我真的希望,这是一个真正的新手问题,我可以很快解决这个问题......

我们在 Windows 2003 服务器环境中安装了一个基于 perl 的 Web 应用程序。安装的版本包含一个错误,我知道 哪里 应用补丁。基本上:我已经仔细更改了其中一个网络应用程序 pm 文件中的两行。

令我惊讶的是,文件更改被忽略了,我仍然收到相同的错误消息,其中引用了旧版本的文件 - 可以通过行号清楚地识别。

我已经清除了浏览器缓存,重新启动了 Web 应用程序(包括 apache)——不走运。

现在我认为/希望这是某种 perl 功能,但我什至对这种语言了解得不够多,无法向 google 提出正确的问题。 One tutorial 说,perl 是一种解释性语言,对源文件的更改会立即生效。这不适用于我的网站...

是否有更多的缓存/文件我必须触摸或删除才能使我的更改生效?

【问题讨论】:

  • “一个教程说,perl 是一种解释性语言,对源文件的更改会立即生效。这对我的站点来说不是真的......”这不是真的.改变源代码不会改变你的程序——Perl 可以自我感知(open+0;),但不能自我修改(很容易,无论如何)。一旦代码被编译成操作码,源代码就不再重要了。
  • @Hugmeir - 可能是一个提示 - 也许这个文件的 编译 版本在某处缓存/加载/存储?我可以找到并删除它吗?
  • 我在说我的地盘,所以把所有的东西都用一大粒盐,但我不这么认为。停止服务器和/或 Perl 解释器应该会使那些“缓存”版本消失。不过,这可能不适用于网络服务器。也许您可以重新标记问题?
  • @Hugmeir - 我在 hackstay 中找到了针 - 是的,它很痛 ;) 请参阅下面的 cw 答案。
  • Perl 通常不会将编译后的二进制文件存储在磁盘上。有一个实验模块可以让你这样做,但最后我听说它非常不稳定,不建议日常使用。

标签: perl


【解决方案1】:

你确定你的 Perl 实际上使用的是最新版本的 pm 文件吗?其他地方没有其他版本正在使用吗?

  1. 看看@INC
  2. 使用调试器逐步完成您的编程
  3. 在代码周围散布警告,看看它是否被调用。

【讨论】:

  • 另外,确保新版本所在目录是@INC的第一个元素;请记住,脚本的目录是 Perl 查找模块的最后一个位置。为了快速修复,BEGIN { unshift @INC, '/path/to/module/dir' }
  • 谢谢 - 但我既没有知识也没有工具来调试 perl、检查 @inc 或添加日志说明。我对上述.pm 文件进行了文件搜索,这个更改的文件是该机器上唯一的文件。
  • 如果您有能力暂时中断应用程序,请在模块开头添加die "XXXXX\n";。如果 Perl 选择了正确的模块,那么 Perl 应该会报错。
【解决方案2】:

问题已解决,解决方案在 perl 之外 - 感谢您的耐心等待。

Web 应用程序包含一些 javascript/css 缓存。之后

  1. 删除缓存(js-chachecss-cache
  2. 清除浏览器缓存
  3. 重新启动 Internet Explorer (!)

它又开始工作了。不要问我为什么……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多