问题标签 [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 投票
1 回答
346 浏览

windows - Devel::Cover 在 Windows 的 Perl 5.10 上的 mod_perl2 下是否工作?

mod_perl2 和 Perl 5.10 两者配合得很好,但我似乎找不到任何关于在 Win32 下使用 mod_perl2 的Devel::Cover的正面信息。我目前正在使用 ActiveState 的 Perl 5.10,但如果这意味着这种组合可以工作,我愿意切换到 Strawberry Perl。

此外,来自 ActiveState、Bribes、UWinnipeg 或 Trouchelle 的 Perl 5.10 似乎无法使用 Devel::Cover PPD,因此,如果您能够使其工作,那么您通过哪些步骤来运行成功的 make ?

0 投票
2 回答
432 浏览

perl - 如何在 mod_perl 的 BEGIN 块中访问 Apache 服务器配置?

我一直在尝试从使用 PerlSetEnv 切换到使用自定义配置指令。我的配置模块带有set_val来自文档的副本:

...由每个自定义指令子调用。然后我有我的.conf:

这很好,因为 httpd -t 可以确定文件的语法。问题是我似乎无法从 BEGIN 块中获取配置文件中的值,这是我需要做的。

我试过修补各种各样的东西:

……但无济于事。正如它所说,我的大部分努力(例如尝试访问CmdParms->server)导致Parent: child process exited with status 3221225477 -- RestartingApache自动重启。如果我通过ServerUtil->server to get_config()了,服务器会保持活动状态,但警告只会打印出“1”。

我在某处读到,这是因为您无法在BEGIN块内获得任何与请求相关的内容,因为请求会有所不同。这有点道理,除了使用 PerlOptions +GlobalRequest 我已经能够$ENV在一个BEGIN块中看到,那么为什么我不能看到我自己的指令,就像它们依赖于请求的发生方式一样?特别令人困惑的是,如果我尝试传递Apache2::RequestUtil->request->per\_dir\_config()get_config(),它会说Global $r object is not available. 如果在一个BEGIN块中这是真的,我怎么能得到$ENV

0 投票
3 回答
159 浏览

windows - 在哪里可以找到与 mod_perl2 一起使用的代码分析和/或代码覆盖模块?

有没有办法在 mod_perl2 下获得这个功能?

它可以通过网络请求而不是命令行触发吗?或者我是否需要伪造我的脚本所需的任何 $ENV 变量和查询字符串和 cookie 并以某种方式使用命令行?

Google 和 CPAN 搜索似乎都指向了一些东西,它们要么一开始就不支持 mod_perl,要么支持,但已经过时并且没有提到 mod_perl2。

0 投票
3 回答
2182 浏览

perl - 如何使用 mod_perl2 正确分叉?

我无法从在 mod_perl2 下运行的一些代码分叉一个长时间运行的进程。

大部分情况下一切正常,但似乎分叉的进程正在持有 Apache 日志文件的打开句柄 - 这意味着 Apache 在进程运行时不会重新启动(我收到“无法打开日志文件”消息)。

这是我正在使用的代码:

早在 mod_perl1 的日子里,我记得使用$r->cleanup_for_exec来解决这个问题,但在 mod_perl2 下似乎不支持它。(编辑:显然它不再需要了..)

任何关于如何从 mod_perl2 正确启动长时间运行的进程而没有这些问题的建议将不胜感激!

0 投票
1 回答
646 浏览

perl - mod_perl 2 变量和进程损坏

我们刚刚将一个相当大的代码库从古老的 Perl 5.005.03 CGI 环境移植到 mod_perl 2,现在它正在进行公开测试,我们不时遇到一些可能相关的问题。这些会累积起来,直到我们必须重新启动服务器。

我们所有的代码都在 use strict 下编译,但之前被称为编译、运行和丢弃的 CGI 脚本。到目前为止我们遇到的问题:使用旧式全局文件句柄(而不是)设置$|或调用。还调用- 在我们开始公测后不久,我们发现例如 /bin/tail 或 /usr/sbin/sendmail 在端口 80 和 443 上监听,这阻止了服务器重新启动。从那以后,我重写了该代码以使用纯 Perl 方法,我们不再有这个问题。STDOUT->autoflush(1);open(ERRORFILE, $errorfile)open(my $fh_error, $errorfile)system()

仍然存在两个问题。第一个是日志充满了 mod_perl 抱怨常量已被重新定义,例如

此外,有时看似核心的变量会被丢弃。我们的核心内部模块之一记录有关 PID 和脚本名称的信息,并生成如下信息:

在其他时候,进程 ID 将以undef. 这是罕见且间歇性的。

其次,也是间歇性的,我们偶尔会看到垃圾收集没有启动。(可能是弱引用的问题?但几乎所有时间一切正常。)最直接的症状是打开的数据库句柄从不关闭,但是当我深入研究这个问题时,很明显在标准 Perl 哈希对象中存储了一个 DBI 对象,并且该对象的DESTROY方法(很少和间歇性地)没有被调用。

我们正在运行 Debian 5.0 (Lenny)、Perl 5.10.0、Apache 2.29、mod_perl 2.0.4、openSSL 0.9.8g。如有必要,我可以提供更多信息,但我认为这是基础。

apache 配置的显着部分,即/etc/apache2/sites-enabled/*sitename*,是(出于保密原因编辑了一些位):

那里有一些 SSL、重写和重定向的东西,但这是重要的东西。

这听起来很熟悉吗?或者,任何人都可以推荐任何进一步调试问题的方法吗?

0 投票
3 回答
412 浏览

perl - “本地我们的”是在 mod_perl2 下的对象模块中使用的东西,还是只在脚本中使用?

为了使您的脚本适合 mp2,避免需要任何兼容性包装器等,据说您应该使用“local our”而不是“my”来声明变量。在模块中呢?

是对的吗?或者它应该是“我的”,以便模块的其余部分可以在“使用严格”下获得 $self?

0 投票
1 回答
116 浏览

httpd.conf - 为什么我的部分变量有时仅在 mod_perl 下可用?

在 httpd.conf 我有:

根据文档,由于它是合格的,因此应该保留在我的 perl 脚本中,这些脚本与 modperl 处理程序一起运行。有时他们会这样做。但是我需要做的就是触摸 MyPackage.pm,突然之间 $MyPackage::foo 现在是 undef。重新启动 Web 服务器,它再次工作。

有人能止住我的眼泪吗?

我最好的猜测是,当解析 .conf 时,该块只运行一次,然后一个新线程拾取重新加载的文件。但是为什么它不是每个线程运行一次呢?除了 $ENV 和每个服务器只加载一次然后复制到所有解释器的自定义指令之外,我是否可以使用其他东西?(我可能在这里最后使用了错误的术语,但你明白了。)

0 投票
1 回答
1230 浏览

perl - 如何在不重新启动的情况下调试 mod_perl2 模块?

环境:Apache/2.2.11 (Win32) mod_apreq2-20051231/2.6.2-dev mod_perl/2.0.4-dev Perl/v5.10.0

情况与此讨论列表帖子中描述的情况非常相似,除了在 win32 上。

我在 httpd.conf 中有这个:

...以及只有 mod-perl 脚本处理。

我有一个使用 MyPackage 模块的脚本,它正在工作。

我破坏了模块,然后重新加载脚本。这个错误很有帮助,告诉我在哪里破坏了模块。

(如果此时我再次重新加载,它只告诉我“未定义的子例程 &ModPerl::ROOT::ModPerl::Registry...”,因为它第一次无法加载文件。但无论哪种方式如下行为仍然发生。)

我恢复了中断,并触摸了脚本文件,这样它就会重新加载模块,然后重新加载。现在它说:

即使我触摸了脚本和模块,我也无法正确地重新加载它,除非重新启动 Web 服务器。

仅破坏脚本本身(而不是模块)可以正常工作:适当的错误并将其改回会导致它在重新加载时再次工作。

在完成这些事情之后,我在测试之前重新启动了 Web 服务器:

  1. 我尝试进行跟踪,但它继续出错的行是 ModPerl/RegistryCooker.pm 第 204 行,这只是 eval{} 整个脚本的行。

  2. 我尝试在脚本和模块中将“使用警告 FATAL => 'all'”更改为“使用警告”。没有什么不同。

  3. 我试过禁用我的自定义 $SIG{__DIE__} 功能。没有什么不同。(好吧,当然,只是在出现错误的地方,但产生的错误是一样的。)

  4. 根据开头的讨论链接,发现 MaxRequestsPerChild 一直为 0,我尝试了 ThreadsPerChild 1,但没有区别。我尝试将 MaxRequestsPerChild 设置为 1,这解决了这个问题的奇怪行为,但在每次请求后重新启动 Web 服务器:

    这不是一个好的解决方案,因为我有大量代码在第一次点击页面时运行。

  5. 同样根据讨论,我将 httpd 作为服务运行,所以我在服务参数窗口中添加了 -X 并点击开始,它仍然试图在整整三分钟后启动(通常在 3 秒内启动。)甚至超时信息。通过任务管理器终止进程并验证我无法从 Web 浏览器访问该页面。从命令行启动 httpd -X。仍然与此问题顶部的行为相同。我还发现运行 httpd -? 时没有列出 -X 很奇怪。也许它在 win32 MPM 上不可用?

  6. 在该线程中,大卫指出:

    我对此类问题进行故障排除的经验表明,被卸载的包可能删除了存储在重新加载的模块的包空间中的值(可能在 BEGIN 块时间设置),随后的要求没有恢复。

    但这不适用于我的代码。我介绍的“破坏脚本”错误只是在已经存在的行之上添加了一个额外的“我的 $var”行,这样第二个就会抱怨它已经被声明了。

在每次重新加载后(无论是自动,通过 MaxRequestsPerChild,还是像以前一样手动)都没有重新启动 Web 服务器,就没有办法处理 mod_perl2 模块吗?

0 投票
1 回答
354 浏览

perl - 如何使用 mod_perl2 和 Apache Bucket Brigades?

我正在编写一个应用程序来动态代理和重写网页,并且非常确定使用 mod_perl2 - 我正在使用 mod_perl (v1) 的现有实现。在 mod_perl2 中,有 APR::Brigades 和 APR::Buckets 的想法,根据我的模糊理解,这是一种进行我想要的过滤和重写的有效方法。但是,除了这些模块的 Perldoc 页面之外,我什么也找不到,所以我真的很不确定如何使用它们。

任何人都可以向我解释 mod_perl2 Bucket Brigades,指向我的教程,或者甚至向我展示一些我可以从中学习的使用 mod_perl2 的开源应用程序吗?

0 投票
2 回答
1651 浏览

safari - Safari 浏览器不会显示错误 401 页面

我正在使用 Apache 2 并在 httpd.conf 中有一个自定义 401 页面

当我访问受保护的资源时,所有浏览器都会显示基本的 http 身份验证对话框。如果我单击“取消”,除 Safari(v3 和 v4)之外的所有浏览器都将显示自定义 401 页面。Safari 只显示当前页面。

有没有办法让 Safari 通过 Apache 配置和/或 mod_perl 处理程序显示 401 页面?