![共享主机:使用自定义 Perl 版本进行 CGI](https://linux22.com/image/532740/%E5%85%B1%E4%BA%AB%E4%B8%BB%E6%9C%BA%EF%BC%9A%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%20Perl%20%E7%89%88%E6%9C%AC%E8%BF%9B%E8%A1%8C%20CGI.png)
我正在尝试使用其中一种新式 Perl Web 框架 (Dancer) 在廉价共享主机上改造一些糟糕的旧网站。现有 Perl 安装 (5.6.1) 存在模块依赖问题,因此我在本地构建了一个新版本 (5.12)。
在测试我的应用程序或使用开发服务器时,新版 Perl 似乎运行良好,我希望只需更改 CGI 脚本以指向我的新 Perl,Apache 就可以正常提供服务。不幸的是,在 Apache 错误日志中,我只得到:
failed to open log file
fopen: Permission denied
[Thu Dec 9 14:45:21 2010] [error] [client 138.***.***.***] Premature end of script headers: /home/www/hosts/blahblah/cgi-bin/bb/public/dispatch.cgi
这似乎表明 Apache 无法找到或执行我的新 Perl 版本,但我不明白为什么。
我检查了本地 Perl 的权限,发现它们都是 755,我以为这是用户万维网可以访问并执行。现在我没主意了?还有什么我可以尝试的吗?
我可以通过 SSH 进入托管服务器,但没有 root 权限或访问 Apache 配置的权限。
谢谢。
答案1
不确定我是否应该自己“回答”这个问题,但我最终还是解决了这个问题。我在 ~/perl5 目录中安装了我自己的 Perl 版本,但 Apache 显然只能看到 ~/www 内部(指向我的域名的符号链接)。重建 Perl 和 ~/www/perl5 内的所有模块解决了问题。
得到教训:
- 如果我配置 Perl 时启用了“相对 @INC 路径”选项,我就可以移动所有内容,从而节省大量时间 -不是尽管这是默认设置。
- 如果您处于受限环境中且无法使用常规 CPAN 工作,则 cpanm(CPAN 上的 App::cpanminus)可以真正节省安装 Perl 模块及其依赖项的时间。
这不太可能对处于类似境况的人有所帮助,但你永远不知道。
(顺便说一句,现在我已经解决了构建/运行问题,运行像 Dancer 这样的现代框架似乎无法与常规的旧 CGI 配合使用。可能还存在一些配置问题,但似乎难以置信为我的小应用提供服务时速度很慢。但这些是另一个 SF 问题的问题。)