什么是安装Perl Web应用程序的最佳系统?

时间:2020-03-06 14:49:27  来源:igfitidea点击:

似乎大多数Perl安装程序都集中在安装Perl模块而不是应用程序上。诸如ExtUtils :: MakeMaker和Module :: Build之类的东西非常适合于模块,但是Web Apps需要一些额外的工作。

理想情况下,从存储库中签出源代码之后执行以下操作将是一件很不错的事情:

  • 检测到缺少依赖项
  • 从CPAN下载并安装依赖项
  • 运行命令以将源"构建"为最终状态(执行本地环境所需的任何源解析或者配置)。
  • 运行命令以将生成的文件安装到适当的位置。不仅perl模块,而且还应该可以通过Web访问的模板(.tt)文件,CGI脚本,JS和图像文件之类的东西。
  • 确保对已安装的文件(和SELinux上下文,如有必要)设置了适当的权限。

现在,我们有一个基于Module :: Build的系统,可以完成大部分工作。该工作是由当时正在学习使用Module :: Build的我的同事完成的,我们希望就通用化我们的解决方案提供一些建议,因为它目前是针对特定应用程序的。特别是,我们的系统要求我们手动安装依赖项(尽管它确实会检测到它们)。

我们是否使用过特别成功的特定系统?我们是否需要基于Module :: Build或者ExtUtils :: MakeMaker编写针对应用程序的安装程序,还是可以使用更通用的安装程序?

编辑:要回答下面的布莱恩的问题:

  • 我们可以登录机器
  • 我们没有对计算机的root访问权限
  • 这些机器都是(表面上)具有启用了SELinux的RHEL5的完全相同的内部版本
  • 当前,安装机器的人员仅是我们小组中的程序员,而我们的资料仅供公众使用。但是,可以想象我们的源代码最终可以安装在我们组织中其他人的计算机上,由他们的程序员或者系统人员安装。
  • 我们通过从存储库中签出进行安装,尽管我们希望可以选择使用分布式存档(请参见上文)。

解决方案

我建议我们认真考虑使用RPM之类的打包系统来执行此操作。即使我们在Windows上运行,我也会考虑使用RPM和cygwin进行安装。我们甚至可以设置yum或者apt存储库,以将软件包交付到远程系统。

如果我们正在为运行任意数量的OS和发行版的客户寻找通用安装程序,那么问题将变得更加棘手。

暗示RPM的答案绝对是一个不错的选择。使用系统的程序包管理器绝对可以使生活更轻松。但是,这可能意味着我们还需要打包其他Perl模块。

我们也可以看看Shipwright。这是一个基于Perl的工具,用于打包应用程序及其所有Perl模块依赖项。现在还处于初期,但看起来很有希望。

至于安装依赖项,不难简单地打包一堆tarball,然后让我们基于Module :: Build的解决方案安装它们。我们应该看一下pip,这使从tarball安装模块非常简单。我们可以将其与代码库打包在一起,然后只需从我们自己的安装程序中调用它即可处理deps。

我质疑依靠CPAN是否是一个好主意。 CPAN Shell始终会获取发行版的最新版本,而不是特定版本。如果我们对确保可重复的安装感兴趣,那么它不是正确的工具。

我们安装网络应用程序有哪些限制?我们可以登录机器吗?所有的机器都运行相同的东西吗?是安装Web应用程序的同事还是来自普通大众的人?是安装此系统管理员,程序员,Web管理器或者其他工具的人员吗?我们是通过分发存档进行安装还是从源代码管理中签出?

对于我的大部分工作(涉及熟悉Perl在控制环境中安装的系统管理员),我只使用MakeMaker。如果我们对MakeMaker有所了解,就很容易执行列出的所有事情。如果我们想进一步了解,请问另一个问题。 ;)Module :: Build也很容易,如果我们还不喜欢使用MakeMaker,那么该方法也很容易。

如果人们对命令行和安装软件有一定的了解,Module :: Build将是处理许多不同情况的好方法。 Module :: Build将具有很大的灵活性,但还有更多工作要做。而且,cpan工具(Perl附带)可以从当前目录安装并为我们处理依赖项。只需告诉它安装当前目录即可:

$ cpan .

如果我们只需要安装在一个平台上,则可能会更轻松地制作本机格式的软件包。我们甚至可以使用Module :: Build来为我们制作该软件包,以便开发人员具有Module :: Build的灵活性,但是安装程序可以简化本机过程。坚持使用Module :: Build也意味着我们可以通过一个构建工具为不同的平台创建不同的软件包。

如果安装Web应用程序的人员真的不了解命令行,CPAN等内容,那么我们可能想要使用不会吓them他们或者使他们思考正在发生什么事情的打包程序和安装程序,并且可以自动准确地向我们报告问题。

正如Dave指出的那样,使用真实的CPAN镜像始终可以为我们提供模块的最新版本,但是我们也可以制作具有所需分发版本的"伪" CPAN镜像,并从中安装常规CPAN工具。对于我们的客户,我们制作" CD上的CPAN"(尽管拇指驱动器现在也很不错)。使用简单的"运行我"脚本,所有内容都将按照所需的确切版本进行安装。举例来说,请参阅我的http://www.slideshare.net/brian_d_foy/mycpan-lapm-september-2007">如果我们对此感兴趣,请发表自己的CPAN讲话。再次考虑时,请考虑听众这不是我们要交给大众的东西。

祝你好运, :)

看看PAR。

乔纳森·罗克威(Jonathan Rockway)在他的书中将其与Catalyst一起使用的一小部分。