【问题标题】:How can I package up my Perl app's dependencies for deployment?如何打包我的 Perl 应用程序的依赖项以进行部署?
【发布时间】:2015-03-07 07:38:22
【问题描述】:

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

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

我认为处理这个问题的最干净的方法是检查我需要的模块的源 tarball 并设置 Module::Build 以使用它们来解决其依赖关系而不是寻找 CPAN,但我没有看到一个选项.这是可行的,还是有另一种方法来汇总我需要的所有模块以进行基本上离线部署?

【问题讨论】:

  • 你看过App::FatPacker吗?
  • Module::Build 不会(我上次检查过)本身解决依赖关系,它只是告诉 cpan(或 cpanplus 或 cpanm)它们是什么。 cpan 可以使用文件 url 来查找模块。但考虑使用 Pinto 之类的东西

标签: perl deployment module-build


【解决方案1】:

我不确定它有多普遍,但我一直在使用 perlbrewPinto 来解决您所说的一些问题。

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

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

当我部署时,我构建了一个 perlbrew perl(具有类似“prod”之类的别名),然后我使用 Pinto 存储库将所有必要的模块安装到该 perlbrew perl 中。我目前使用 cpan 捆绑模块(该模块也进入 Pinto 存储库)来促进这一点,因此您只需从存储库安装捆绑包,它就会自动将所有依赖项放入其中。

【讨论】:

    【解决方案2】:

    【讨论】:

    • Stratopan 是提供 Pinto 的 SaaS;你也可以自己使用 Pinto。
    【解决方案3】:

    如上面的 cmets 所述,Pinto 可能会满足您的需求,因为它会创建您自己的 CPAN 存储库。

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

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


    第二个答案

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

    apt-get update
    apt-get upgrade
    

    在客户端机器上,只要它们有您自己的存储库作为源

    【讨论】:

      猜你喜欢
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 2011-03-15
      • 2012-04-15
      • 2023-03-12
      相关资源
      最近更新 更多