2008-09-27 116 views
11

似乎Perl的大多数安装程序都围绕安装Perl模块而不是应用程序。 ExtUtils :: MakeMaker和Module :: Build等模块非常适合模块,但需要一些额外的Web Apps工作。什么是安装Perl Web应用程序的最佳系统?

理想情况下是很好能够做到从仓库中签出源后,将以下内容:

  • 都有缺失的依赖检测
  • 下载,然后从CPAN安装依赖
  • 运行一个命令将源“构建”为最终状态(执行本地环境所需的任何源解析或配置)。
  • 运行命令将构建的文件安装到适当的位置。不仅是perl模块,还有像template(.tt)文件,CGI脚本,JS和应该可以通过web访问的图像文件。
  • 确保在安装的文件(如果需要的话还有SELinux上下文)上设置了适当的权限。

现在我们有一个基于Module :: Build的系统,可以完成大部分工作。这项工作是由我的同事完成的,他的同事当时正在学习使用Module :: Build,我们希望就推广我们的解决方案提供一些建议,因为它现在是相当具体的应用程序。特别是,我们的系统要求我们手动安装依赖关系(尽管它检测到它们)。

是否有您使用过的特别系统特别成功?你是否需要编写一个基于Module :: BuildExtUtils :: MakeMaker的安装程序,这对您的应用程序特别有用,或者是更通用的安装程序?

编辑:要回答以下Brian的问题:

  • 我们可以登录到机器
  • 我们不必机器
  • 机器都(表面上)相同的建立root访问权限启用了SELinux的RHEL5
  • 目前,安装机器的人员仅来自我们团队的程序员,我们的源代码并不向公众开放。但是,可以想象,我们的源代码最终可以安装在我们组织的其他人的机器上,由程序员或系统人员安装。
  • 虽然我们希望可以选择使用分布式存档(请参阅上文),但我们通过检出存储库来进行安装。

回答

6

安装网络应用程序有什么限制?你能登录到机器吗?所有的机器都运行相同的东西吗?人们是安装网络应用程序的同事还是来自普通大众的随机人员?安装这些系统管理员,程序员,网络管理员或其他人员的人员是?你是通过分发一个存档还是从源代码控制检查来安装的?

对于我的大部分东西,其中涉及系统管理员熟悉安装在控制环境中的Perl,我只使用MakeMaker。如果你知道一些关于MakeMaker的信息,很容易就可以完成你列出的所有事情。如果你想更多地了解这一点,请提出另一个问题。 ;)Module::Build是一样容易,但如果你还不喜欢使用MakeMaker的路要走。

Module::Build如果人们对命令行和安装软件有一定程度的了解,将会是处理大量不同情况的好方法。 Module::Build您将拥有很大的灵活性,但也有更多的工作。而且,cpan工具(与Perl一起提供)可以从当前目录安装并为您处理相关性。只要告诉它来安装当前目录:

$ cpan . 

如果你只需要安装在单一platorm,你可能有一个更容易的时间在原生格式制作包装。您甚至可以让Module::Build为您制作该软件包,以便开发人员具有Module::Build的灵活性,但安装人员可以轻松实现本地进程。坚持Module::Build也意味着您可以从一个构建工具为不同的平台创建不同的包。

如果安装Web应用程序的人对命令行,CPAN和其他东西不了解,那么您可能希望使用不会让他们感到恐慌的安装程序或安装程序,或者让他们考虑将要执行的操作并且可以自动准确地向您报告问题。 Dave指出,使用真正的CPAN镜像总能让你获得最新版本的模块,但你也可以制作你自己的“伪造”CPAN镜像,并且使用你想要的发行版本,并且安装正常的CPAN工具。那。对于我们的客户,我们制作了“CPAN CD”(尽管拇指驱动器现在也很好)。通过一个简单的“跑我”脚本,所有的东西都可以安装在他们需要的版本中。例如,请参阅我的http://www.slideshare.net/brian_d_foy/mycpan-lapm-september-2007“>如果您对此感兴趣,请自己制作CPAN谈话。再次,当您考虑到这一点时,请考虑观众这不是你要交给公众的东西。

祝你好运:)

3

我建议你认真考虑RPM这样的包系统来做到这一点。即使你在Windows上运行,我也会考虑使用RPM和cygwin来进行安装。您甚至可以设置一个yum或apt存储库来将软件包交付给远程系统。

如果您正在为运行任意数量的操作系统和发行版的客户寻找常规安装程序,那么问题就变得更加困难。

6

建议RPM的答案绝对是一个很好的答案。使用你的系统的包管理器绝对可以让你的生活更轻松。但是,这可能意味着您还需要打包一堆其他Perl模块。

你也可以看看Shipwright。这是一个用于打包应用程序及其所有Perl模块依赖关系的基于Perl的工具。这还为时尚早,但看起来很有希望。

就安装依赖关系而言,简单地打包一堆tarball然后让你使用基于Module :: Build的解决方案安装它们并不困难。你应该看看pip,这使得从压缩包安装模块非常简单。您可以将其与您的代码库打包,并从您自己的安装程序中调用它来处理代码。

我怀疑依靠CPAN是否是一个好主意。 CPAN shell总是获取最新版本的发行版,而不是特定的版本。如果您对确保可重复安装感兴趣,它不是正确的工具。

2

看看PAR

Jonathan Rockway作为一本关于在他的书中使用Catalyst的小部分。

相关问题