问题标签 [mod-perl2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
122 浏览

performance - 如何确定 PerlLogHandler 性能影响?

我想创建一个自定义 Apache2 日志处理程序,在 apache 站点上找到的模板是:

鸡群的性能成本是多少?此日志记录过程是并行完成的,还是与 HTTP 请求串行完成的?同时,性能并不重要,但我不希望用户再等一秒钟来添加这样的东西。

0 投票
1 回答
79 浏览

winapi - 帮助解决始终可重复的 mod_perl2 / $SIG{__DIE__} 错误

这是 Apache 2.2 上的 mod_perl2,win32 上的 ActiveState Perl 5.10。

我覆盖$SIG{__DIE__}并打开 DBI 的 RaiseError 标志,文档中的 AFAICT 应该在数据库调用失败时调用我的覆盖。似乎几乎总是,除了在一种情况下,我不明白为什么。

我的脚本有一个our $page变量,并且是 mod_perl2,我可以从覆盖中得到这个,如下所示:

这工作正常。现在,在其中$page,我有一个“允许”错误值的数组引用,当它们从数据库返回时,我想做一些不同的事情。当数据库抛出这些错误之一时,我想将其转换为用户友好的消息,$r->print即 JSON 格式,并停止执行(行为 A)。出于某种原因,它反而将控制权返回给脚本(行为 B)。

这是我的脚本的主要部分:

如果我注释掉第一行,我会得到一个正常的错误(处理意外的事情)(行为 C),这是我所期望的,因为我没有将发生的错误添加到允许的错误列表中。真正奇怪的是,如果我剪切第一行并将其粘贴到我的$SIG{__DIE__}覆盖中,它会起作用:JSON 响应被覆盖、打印,并且在{test}分配之前执行停止(行为 A)。更奇怪的是,我可以设置{allowed}为任何一组数字,只要它特别包含“22007”,我就会得到行为 B。如果没有,我会得到行为 C。更奇怪的是,我实际上可以填充我的覆盖有任何东西(警告,呼吁CORE::die等——只要它编译),我仍然得到行为 B——即使覆盖不再包含任何使其成为可能的代码!此外,我没有得到对warnand的调用的任何预期结果CORE::die,只是在日志中保持沉默,所以我什至无法尝试通过我的覆盖手动跟踪执行路径。

我在每个脚本保存之间重新启动了 Apache2.2。我什至将覆盖移到与脚本本身相同的脚本文件中,移出它通常所在的模块,并注释掉覆盖通常所在的整个模块文件,然后重新启动。

如果我取出第一行,或者从中取出“22007”,我可以warn手动die调试我喜欢的所有内容,并且一切都按预期工作。尽管服务器重置,它从不输出任何不同的“22007”是什么?除了翻译图,整个项目的其他任何地方都没有对“22007”的引用,我可以将它从该文件中完全删除并重新启动,结果没有什么不同。它的行为就好像它已经缓存了我当天早些时候的覆盖并且永远不会忘记。这也不是浏览器缓存问题,因为我可以添加随机查询字符串,结果没有什么不同。

这是我有过的最奇怪和最令人沮丧的 mod_perl2 体验,而且我已经没有想法了。有人有任何提示吗?我唯一能想到的是这是一个缓存问题,但我已经无数次重启了服务。

由于这是一天的结束,我想我会尝试完全重新启动服务器计算机,但它仍然没有改变任何东西。{state}我什至在重新启动服务器之前更改了分配给它的唯一行:

然而,之后的输出为“22007”,只有在我完好无损{test}的情况下才应该是这样。= $errno

即使它是进行缓存的反向代理,这种情况对我来说也没有意义,因为请求可能不同。在完全重新启动服务器后,它如何仍然分配一个不再存在于代码中的值,即$SIG{__DIE__},当它不再存在于任何文件中时,它如何在完全重新启动后使用我的旧覆盖?

更新: 我还尝试将允许的错误更改为 '42601' 并将 db 调用更改为'select',这会产生该错误代码,但没有将其添加到翻译映射中。它仍然给我行为 B,设置{state}为“42601”,所以它不是特定于“22007”。放入的任何错误代码{allowed},如果确实发生了该错误,则它正在运行旧版本的覆盖。导致不存在的错误,{allowed}它运行当前版本。但是,在覆盖之前,它如何知道当前错误是否在 中{allowed},或者这是否意味着什么?{allowed}(因为覆盖是当前错误的唯一位置。)

0 投票
1 回答
1041 浏览

perl - 如何在 mod_perl2 下的 startup.pl 中学习 DOCUMENT_ROOT?

我想在startup.pl中学习DOCUMENT_ROOT,但我能做的最好的就是学习server_root:

这是非常没用的。我可以设置一个环境变量

但如果可能的话,我不喜欢额外的配置。

有没有办法通过其他方式获得 DOCUMENT_ROOT ?

0 投票
1 回答
1191 浏览

perl - 如何在 mod_perl2 下运行 Devel::Cover?

不幸的是,Devel::Cover还不能使用线程。

它也不适用于 prefork。

use录取startup.pl,Devel::Cover问题

perl 5.8.9,Apache 2.2.13。我的操作系统是 FreeBSD,如果这很重要的话。报告了win32同样的问题。

更新:这是输出PerlTrace all

0 投票
1 回答
173 浏览

perl - 活动状态 Perl - IOCP

我正在考虑在我们的网络相关代码之一中使用 perl 中的 IOCP。目前 Active State Perl 直到 5.10 不提供这个功能?有人知道免费模块可以在 perl 中使用像 IOCP 这样的 ASIO 功能吗?

-卡提克

0 投票
1 回答
39 浏览

winapi - 转储 mod_perlified 变量——本地命名空间是什么?

我有一个 mod_perl 脚本:

它死了undef at C:/www/test.pl line 8.

我期待"ugly" at C:/www/test.pl line 8.

如果相反我

...重新启动服务以清除任何缓存的变量后,face甚至没有列出。

我可以发誓这个代码在我上次使用它时工作正常......我die围绕这种命名局部变量的方式编写了一个完整的钩子,以便我可以获取某些局部变量来转储调试信息。

什么是本地命名空间?

0 投票
1 回答
456 浏览

perl - Apache 不会使用 Macports Perl5.8.9 执行 CGI

我试图让 perl 在我的 Apache 2 macports 安装下运行。我希望有经验的 perl 极客可以帮助我。我有...

  1. 让 Apache 运行得很好。Macports 使用 perl5 占位符和 perl5.8.9 安装它。
  2. 安装了 mod_perl2。
  3. 运行脚本来配置 httpd.conf。
  4. 重启阿帕奇。
  5. 在 htdocs 中编写了以下测试脚本

    /li>

我得到的只是打印到屏幕上的脚本内容。我错过了一步吗?我需要在 .conf 文件中进行一些额外的配置吗?

0 投票
3 回答
271 浏览

perl - 有没有办法强制 mod_perl 重新使用缓冲内存?

我有一个在 mod_perl 中运行的 Perl 脚本,它需要向客户端写入大量数据,可能需要很长时间。我观察到的行为是,一旦我打印并刷新某些内容,即使我也不会回收缓冲内存rflush(我知道操作系统无法回收它)。

这就是 mod_perl 的操作方式吗?有没有一种方法可以强制它定期释放缓冲内存,以便我可以将其用于新的缓冲区,而不是从操作系统中获取更多?

澄清一下,我自己没有使用任何缓冲区,我的代码也没有泄漏。考虑以下简单示例:

这严重泄漏,并且我的请求保持有效,因此它可能会活跃数天。

0 投票
2 回答
890 浏览

perl - 在 mod_perl2 下将 fork 与 Apache::DBI 一起使用的安全方法是什么?

我在子进程中使用 Apache::DBI 时遇到问题。问题是 Apache::DBI 为所有使用它的进程提供了一个句柄,所以我得到

DBD::mysql::db selectall_arrayref 失败:命令不同步;您现在无法在 /usr/local/www/apache22/data/test-fork.cgi 第 20 行运行此命令。

重新连接没有帮助,因为 Apache::DBI 在所有进程中重新连接,因为我理解以下错误

服务器遇到内部错误,无法完成您的请求。

错误消息:DBD 驱动程序尚未在 /usr/local/lib/perl5/site_perl/5.8.9/Apache/DBI.pm 第 283 行实现 AutoCommit 属性。,

这是原始代码:

我用于重新连接的代码:

有没有一种安全的方法来使用 Apache::DBI 和分叉?有没有办法让它创建一个新的连接?

0 投票
2 回答
409 浏览

perl - 在 mod_perl2 下分叉是个坏主意吗?

在 mod_perl2 下是否有任何 fork 的禁忌症?是否应该使用另一种方式在 mod_perl2 下运行后台进程?