【问题标题】:Running movabletype 5.2+ with perlbrew perl and starman使用 perlbrew perl 和 starman 运行可移动类型 5.2+
【发布时间】:2013-06-04 13:45:14
【问题描述】:

构成可移动类型的 CGI 脚本和工具具有硬编码的 perl 二进制名称

#!/usr/bin/perl -w

除非我手动将所有这些实例替换为

#!/usr/bin/env perl
use warnings;

在我的私有版本 perl(安装 perlbrew)下似乎无法运行移动类型。有什么方法可以在 perlbrew perl 下运行可移动类型,而无需手动进行这些更改?

【问题讨论】:

  • 除非你用 my $app = Plack::App::WrapCGI->new(script => "/path/to/script.cgi" 运行脚本,执行 = > 1)->to_app; 而不是 Plack::App::WrapCGI->new( script => "/path/to/script.cgi") 然后starman 不是去 exec+fork 运行 CGI 脚本,所以它运行的 Perl 与 Starman 运行的 Perl 相同,即你的 perlbrew perl
  • 另外 #!/usr/bin/env perl 实际上不足以在适当的 perlbrewed perl 下运行您的脚本,有关更多详细信息,请参阅 github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/issues/58
  • MovableType 确实使用 execute => 1 运行 cgi 脚本,这就是使用系统 perl 的原因。感谢您指出这一点。
  • @Ya.Perelman 我前段时间开始使用 Perlbrew,对此我没有任何答案。我浏览了安装在本地主机上的 MT 实例并更改了 shebang 行,而不是花时间在上面。这不是一个新问题,但这并不意味着它不应该提交给 MT 开发团队。
  • @Dave 在阅读了上面 MkV 的链接后,我倾向于相信 MT 团队会在每一方都找到一块石头和一块坚硬的地方:)。这是一个时代,安装脚本会很方便.....所以我只写了一个递归遍历文件夹并将shebang行替换为正确位置的脚本。 perlbrew 的“别名”命令在一定程度上减轻了这样做的痛苦,因为我使用的是从 github 克隆的版本。问题不仅在于 cgi 脚本,还在于工具文件夹中的大量内容以及 Makefile 中调用的缩小脚本

标签: perl movabletype perlbrew


【解决方案1】:

...编写一个程序来为你改变它们?

#! /usr/bin/env perl
use common::sense;
use Tie::File;

tie my @f, 'Tie::File', shift or die $!;
if ($f[0] =~ m,#! */usr/bin/perl( -w)?,) {
  $f[0] = '#! /usr/bin/env perl';
  splice @f, 1, 0, 'use warnings;' if $1
}
untie @f;

有点像。

【讨论】:

  • 很好!! :) 谢谢。将等着看 MT 团队的人是否有更好的解决方案
  • #!/usr/bin/env perl 对于 perlbrewed perls 错误,starman 不会 fork+exec 的 cgi 脚本,它将在与自身相同的 perl 下运行它们。
  • 这就是我愿意相信的。不幸的是,如果您查看 MT 界面中的“系统信息”链接,就会发现它选择了系统 perl。与在 starman 下运行 mt-check.cgi 相同 - 它再次选择系统 perl。假设 env 位于 /usr/bin 中,您能否详细说明为什么 env perl 对于 perlbrewed perls 是错误的?见perlbrew.pl/Dealing-with-shebangs.html
  • 因为您应该能够运行为当前不在您的 PATH 中的 perlbrewed perl 安装的脚本,但它应该使用正确的 perl。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 2011-06-10
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
相关资源
最近更新 更多