如何打包我的Perl应用程序的部署依赖项?

时间:2015-01-09 02:15:06

标签: perl deployment module-build

我正在使用Module::Build部署的Perl应用程序。我需要通过CPAN安装许多模块,因为它们不能通过Ubuntu的软件包管理器获得 - 或者更确切地说,是我们所有服务器使用的内部apt-get镜像。虽然这对我们的开发服务器来说非常好,但是(可以理解)IT不愿意在没有内部缓存或以其他方式控制的生产机器上运行代码。

由于我们目前没有CPAN镜像,这基本上意味着我需要将所有这些非Ubuntu模块放在一个位置,以便它们可以存档和/或提交到版本控制。理想的解决方案是从源代码控制中检查实用程序,为数据库更改一些配置变量等,可以运行build / install命令,然后完成。幸运的是,开发服务器是生产服务器的克隆,因此使用XS或其他体系结构特定功能的模块不应该导致问题。

我认为最简单的处理方法是检查我需要的模块的源代码压缩包,并设置Module::Build使用它们来解析其依赖关系,而不是寻找CPAN,但我不会看到一个选项。这是可行的,还是有另一种方法来整合我本质上离线部署所需的所有模块?

3 个答案:

答案 0 :(得分:3)

正如上面的评论所述,Pinto可能会满足您的需求,因为它会创建您自己的CPAN回购。

  

平托有两个主要目标。首先,Pinto试图解决这个问题   CPAN镜像中的不稳定性。分发档案是   不断添加和删除CPAN,所以如果你用它来构建   系统或应用程序,您可能无法获得相同的结果两次。   其次,Pinto旨在鼓励开发人员使用CPAN工具链   用于建立,测试和依赖管理他们自己的本地   软件,即使他们从未计划将其发布到CPAN。

     

Pinto通过提供创建和创建工具来实现这些目标   管理您自己的分发存档自定义存储库。这些   存储库可以包含您喜欢的任何分发存档,也可以   与标准CPAN工具链一起使用。这些工具也支持   各种操作,使您能够处理常见问题   在开发过程中出现。


第二个答案

或者,如果您只是要部署到Ubuntu,您可以将CPAN模块 - 和您自己的模块转换为带有dh-make-perl的Debian软件包。然后,您可以使用reprepro在自己的仓库中托管它们。这样做的好处是你可以更新包并做一个

apt-get update
apt-get upgrade

在客户端计算机上,只要他们有自己的repo作为源

答案 1 :(得分:1)

答案 2 :(得分:0)

我不确定它有多常见,但我一直在使用perlbrewPinto来解决您正在讨论的一些问题。

  1. 使用perlbrew,我不会与“系统”perl交互。有一个应用程序perl和一个perl系统,我没有安装更高版本的模块的风险,它会以某种方式干扰系统perl正在做的事情。

  2. 使用Pinto,我已经知道CPAN模块的存档版本。

  3. 当我部署时,我构建一个perlbrew perl(带有别名,如“prod”或其他东西),然后使用Pinto存储库将所有必需的模块安装到perlbrew perl中。我目前使用cpan捆绑模块(该模块也进入Pinto仓库)来实现这一点,因此您只需从存储库安装捆绑包,它就会自动将所有依赖项放入其中。