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

标签 perl deployment cpan

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

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

  • 这显然是几代开发人员有机地发展起来的一团糟。理想情况下,我想从内部库和各种相关脚本组中创建可安装 cpan 的发行版,并使用模块依赖项让 cpan 为我安装它们。

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

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

    任何建议高度赞赏。

    最佳答案

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

  • 部署标准已知良好的 Perl 可执行文件和库(CPAN 模块)。
  • Perl 脚本和模块的部署。

  • 曾几何时,我支持大型 Solaris Perl 安装。我尝试了一段时间来“并排”安装 Linux Perl,重新使用相同的 CPAN 模块。没用。对我来说最大的问题是相当多的 Perl 模块需要编译,这意味着它们针对特定平台。我最终只安装了 2 次,并且始终记得在这两个区域都安装了新的 CPAN 模块。

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

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

    项目 #2 也是如此:脚本存储在网络驱动器(同一个)上,用户运行另一个注册表脚本以将脚本文件夹包含在他们的搜索 PATH 中。我们在一个区域编辑我们的脚本,并有一个“Check-In 'n Release”(“CINR”),我们使用它来 checkin 和发布脚本到用户指向的区域。用户可以在资源管理器中双击脚本,在 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 应用程序中,但如果您可以找出路径,您也许可以。

    祝你好运!

    关于perl - 我应该如何改进我的 perl 应用程序部署过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575890/

    相关文章:

    perl - 合并来自不同文件的列

    windows - 用于 Windows GUI 的 Perl

    eclipse - 在 Tomcat 服务器实例中部署 Spring 应用程序

    node.js - Node Heroku 部署找不到导出的 Mongo 架构

    perl - 如何从 CPAN 手动编译 XS 模块?

    perl - 是否有将短字符串消化成短数字的 CPAN 模块?

    perl - 如何在 Perl 中获取给定时区的秒数 - UTC 时间

    perl - 使用 Perl 进行测试自动化

    ruby-on-rails - AWS EB错误:在所有实例上发现不正确的应用程序版本

    Perl IO::Socket::INET6::sockaddr_in6 重新定义错误