我应该如何改进perl应用程序部署过程?

时间:2012-03-05 23:48:31

标签: perl deployment cpan

我开发并维护了一个包含50多个脚本的生物信息学应用程序套件,其部署过程非常混乱:

  • 整个套件位于一个大的git存储库中。它有很多CPAN依赖项,还有许多内部模块。
  • 开发平台是Linux。
  • 部署平台是Windows(20多个用户),Mac(10 +),Linux(2-3)。大多数人不是“超级用户”。
  • 对于Windows,我有一个安装程序(用NSIS制作)用于草莓perl +所需的模块(即,我在一个窗口盒上安装了草莓,安装了所有模块并压缩了c:\ strawberry),以及另一个安装程序 - - 我做了这个b / c套件比所需模块列表更新了很多。
  • 对于Mac,我将perl 5.14,所有必需的cpan模块和应用程序套件捆绑到一个可双击的安装程序中。我不使用系统perl b / c它往往是过时的。我将所有东西捆绑在一起不像在windows b / c我吮吸mac。
  • 对于Linux,我手动处理它们的安装,因为它们只有少数,并且它们使用不同的发行版。

这显然是在几代开发人员中有机增长的混乱。理想情况下,我想从内部库和各种相关脚本组创建cpan-installable发行版,并使用模块依赖项让cpan为我安装它们。

但是我不确定最好的方法是什么,b / c我仍然需要分发perl本身,必须为CPAN编写某种非命令行接口,控制确切的版本第三方CPAN模块,默认指向我的“DarkPan”,我将存储我们的模块,如何推送更新等等。

我认为我不能使用PerlApp或Par,因为afaik用于捆绑单个脚本,而不是整个脚本。

任何建议都非常感谢。

2 个答案:

答案 0 :(得分:2)

除了提到的3个平台(更多,如果算上Linux变种),你真的有几个不同的问题:

  1. 部署标准已知良好的Perl可执行文件和库(CPAN模块)。
  2. 部署Perl脚本和模块。
  3. 曾几何时,我支持大型Solaris Perl安装。我尝试了一段时间“并排”进行Linux Perl安装,重新使用相同的CPAN模块。没工作。对我来说最大的问题是,相当多的Perl模块需要编译,这意味着它们针对特定平台。我最后只安装了两次,并且始终记得在这两个区域安装新的CPAN模块。

    我们现在是100%的Windows,所以我没有同样的问题。但是,我们从共享网络驱动器上运行Perl。所有用户都映射此驱动器,并运行一个注册表脚本,该脚本将.PL文件与Perl的网络安装相关联。 (参见我对this other Perl question的回答。)

    因此,除了映射的驱动器和注册表脚本之外,用户不需要安装任何东西。甚至CPAN模块也从网络中获取。这解决了项目#1(仅适用于Windows的用户)。

    同样的事情适用于第2项:脚本存储在网络驱动器(同一个)上,用户运行另一个注册表脚本以在其搜索路径中包含脚本文件夹。我们在一个区域编辑我们的脚本,并有一个“签入'版本”(“CINR”),我们用它来签署并向用户指向的区域发布脚本。用户可以在资源管理器中双击脚本,在DOS中运行它们,甚至更好地将它们包含在资源管理器中的上下文菜单中等等。(实际上,我们使用.NET应用程序映射驱动器并制作所有这些用户的设置,但可以更简单。)


    那么,这对其他平台Linux和Mac有何帮助?当我遇到我的Solaris / Linux实验时,我认为你在所有3个平台上都遇到了不同的Perl安装,尽管你应该能够为你的Perl脚本和模块访问相同的网络驱动器。

    在Linux用户的网络驱动器上,Perl安装甚至可能正常。它们可能比Windows用户更容易。 Mac用户很难。我管理一个家庭Mac网络,我认为与其他操作系统相比,Mac OS X中的网络驱动器非常难。它应该像在Linux中一样简单,因为这么多是相同的,但是有很多奇怪的问题(对我来说)映射NFS和SMB驱动器。用户可以手动映射AFP驱动器,但不容易以编程方式进行映射。

    我的Mac建议尝试使用Platypus。尽管您的界面选项仅限于输出(在执行期间不允许用户输入,我可以告诉),将脚本捆绑到双击应用程序中绝对是非常棒的。不确定你是否可以将整个Perl安装放入Platypus应用程序中,但是如果你能找到路径,你可能就可以了。

    祝你好运!

答案 1 :(得分:0)

您可能希望查看CAVA包装程序。它可以在一个包中处理多个脚本。