似乎Perl的大多数安装程序都以安装Perl模块为中心,而不是应用程序。像ExtUtils :: MakeMaker和Module :: Build这样的东西非常适合模块,但需要为Web Apps做一些额外的工作。
理想情况下,从存储库中签出源代码后能够执行以下操作会很好:
现在我们有一个基于 Module :: Build 的系统,可以完成大部分工作。这项工作是由我的同事完成的,他当时正在学习使用 Module :: Build ,我们想要一些关于推广我们的解决方案的建议,因为它是相当专业的应用程序权利现在。特别是,我们的系统要求我们手动安装依赖项(尽管它确实检测到它们)。
您使用过的特定系统是否特别成功?您是否必须根据 Module :: Build 或 ExtUtils :: MakeMaker 编写一个特定于您的应用程序的安装程序,或者是更常用的安装程序?
编辑:回答以下brian的问题:
答案 0 :(得分:6)
答案表明RPM肯定是一个很好的答案。使用系统的包管理器绝对可以让您的生活更轻松。但是,这可能意味着您还需要打包一堆其他Perl模块。
您也可以查看Shipwright。这是一个基于Perl的工具,用于打包应用程序及其所有Perl模块依赖项。现在还处于早期阶段,但看起来很有希望。
就安装依赖项而言,简单地打包一堆tarball并让你基于Module :: Build的解决方案安装它们并不困难。你应该看看pip,这使得从tarball安装模块非常简单。您可以使用您的代码库打包它,只需从您自己的安装程序中调用它来处理deps。
我怀疑依赖CPAN是否是一个好主意。 CPAN shell始终提取最新版本的发行版,而不是特定版本。如果您对确保可重复安装感兴趣,那么它就不是正确的工具。
答案 1 :(得分:6)
安装网络应用有哪些限制?你能登录机器吗?所有的机器都运行相同的东西吗?人们是否安装了网络应用程序的同事或来自公众的随机人员?是安装此系统管理员,程序员,Web管理员还是其他人的人?您是通过分布式存档安装还是从源代码管理中检出?
对于我的大部分内容,其中涉及熟悉Perl在控制环境中安装的系统管理员,我只使用MakeMaker。如果您对MakeMaker
有所了解,很容易让它完成您列出的所有事情。如果您想了解更多相关信息,请提出另一个问题。 ;)Module::Build同样简单,如果您还不喜欢使用MakeMaker
,那就可以了。
Module::Build
将是处理许多不同情况的好方法。 Module::Build
你会有很大的灵活性,但也会有更多的工作。并且,cpan
工具(随Perl一起提供)可以从当前目录安装并为您处理依赖项。只需告诉它安装当前目录:
$ cpan .
如果您只需安装在一个平台上,您可能会更容易以原生格式制作包。您甚至可以Module::Build
为您创建该软件包,以便开发人员具有Module::Build
的灵活性,但安装程序可以轻松实现本机过程。坚持Module::Build
也意味着您可以从单个构建工具为不同平台创建不同的包。
如果安装Web应用程序的人真的不知道命令行,CPAN和其他东西,你可能想要使用一个不会吓到他们的打包器和安装程序,或者让他们考虑发生了什么,并可以自动准确地向您报告问题。
正如Dave指出的那样,使用真正的CPAN镜像总能获得模块的最新版本,但您也可以使用您想要的发行版创建自己的“假”CPAN镜像,并从中安装正常的CPAN工具。对于我们的客户,我们制作“CD上的CPAN”(尽管拇指驱动器现在也很好)。使用简单的“运行我”脚本,所有内容都可以完全按照他们需要的版本安装。例如,请参阅我的http://www.slideshare.net/brian_d_foy/mycpan-lapm-september-2007">如果您对此感兴趣,可以参加我自己的CPAN演讲。再次考虑一下您的思考那不是你向普通大众提供的东西。
祝你好运,:))
答案 2 :(得分:3)
我建议认真考虑像RPM这样的软件包系统来做到这一点。即使你在Windows上运行,我也会考虑使用RPM和cygwin进行安装。您甚至可以设置yum或apt存储库以将包传递到远程系统。
如果您正在为运行任意数量的操作系统和发行版的客户寻找通用安装程序,那么问题就会变得更加困难。
答案 3 :(得分:2)
看看PAR。
乔纳森·洛克威(Jonathan Rockway)在他的书中将这一部分与Catalyst结合使用。