【问题标题】:What's the best system for installing a Perl web app?安装 Perl Web 应用程序的最佳系统是什么?
【发布时间】:2010-09-13 16:59:36
【问题描述】:

似乎大多数 Perl 安装程序都以安装 Perl 模块为中心,而不是应用程序。诸如 ExtUtils::MakeMaker 和 Module::Build 之类的东西非常适合模块,但对于 Web 应用程序需要一些额外的工作。

理想情况下,在从存储库中签出源代码后能够执行以下操作会很好:

  • 检测到缺少依赖项
  • 从 CPAN 下载并安装依赖项
  • 运行命令将源“构建”为最终状态(执行本地环境所需的任何源解析或配置)。
  • 运行命令将构建文件安装到适当的位置。不仅是 perl 模块,还包括模板 (.tt) 文件、CGI 脚本、JS 和图像文件等应该可以通过网络访问的内容。
  • 确保为已安装的文件设置了适当的权限(必要时还包括 SELinux 上下文)。

现在我们有一个基于 Module::Build 的系统来完成大部分工作。这项工作是由我当时正在学习使用 Module::Build 的同事完成的,我们想要一些关于推广我们的解决方案的建议,因为它是相当特定于应用程序的权利现在。特别是,我们的系统要求我们手动安装依赖项(尽管它确实会检测到它们)。

您使用过哪些特别成功的系统?您是否必须编写基于 Module::BuildExtUtils::MakeMaker 的安装程序,该安装程序特定于您的应用程序,还是更通用的可用?

编辑:回答以下布赖恩的问题:

  • 我们可以登录机器
  • 我们没有机器的 root 访问权限
  • 这些机器都是(表面上)相同的启用 SELinux 的 RHEL5 版本
  • 目前,安装机器的人只是我们组的程序员,我们的源不向公众开放。但是,可以想象我们的源代码最终会安装在我们组织中其他人的机器上,由他们的程序员或系统人员安装。
  • 我们通过从存储库中签出进行安装,但我们希望可以选择使用分布式存档(见上文)。

【问题讨论】:

    标签: perl web-applications installation


    【解决方案1】:

    安装网络应用程序有哪些限制?可以登录机器吗?所有机器都运行相同的东西吗?安装网络应用程序的人是同事还是普通大众的随机人?安装此系统管理员、程序员、网络管理员或其他什么的人?您是通过分发存档还是从源代码管理中签出来安装的?

    对于我的大部分内容,包括熟悉在控制环境中安装 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”(尽管拇指驱动器现在也很好)。使用一个简单的“运行我”脚本,所有东西都可以安装在他们需要的版本中。例如,如果您对此感兴趣,请参阅我的制作我自己的 CPAN 演讲。同样,当您考虑这一点时,请考虑观众。这不是你会交给公众的东西。

    祝你好运,:)

    【讨论】:

      【解决方案2】:

      看看PAR

      Jonathan Rockway 在他的书中一小部分介绍了如何将其与 Catalyst 一起使用。

      【讨论】:

        【解决方案3】:

        建议 RPM 的答案绝对是一个好答案。使用系统的包管理器绝对可以让您的生活更轻松。但是,这可能意味着您还需要打包一堆其他 Perl 模块。

        您还可以查看Shipwright。这是一个基于 Perl 的工具,用于打包应用程序及其所有 Perl 模块依赖项。现在还为时尚早,但看起来很有希望。

        就安装依赖项而言,简单地打包一堆 tarball,然后让您基于 Module::Build 的解决方案安装它们并不难。您应该看一下pip,这使得从 tarball 安装模块变得非常简单。您可以将其与您的代码库一起打包,然后简单地从您自己的安装程序中调用它来处理 deps。

        我质疑依赖 CPAN 是否是个好主意。 CPAN shell 总是获取发行版的最新版本,而不是特定版本。如果您对确保可重复安装感兴趣,那么它不是正确的工具。

        【讨论】:

          【解决方案4】:

          我建议认真考虑使用 RPM 等软件包系统来执行此操作。即使您在 Windows 上运行,我也会考虑使用 RPM 和 cygwin 进行安装。您甚至可以设置一个 yum 或 apt 存储库来将软件包传送到远程系统。

          如果您正在为运行任意数量的操作系统和发行版的客户寻找通用安装程序,那么问题就会变得更加困难。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-09-23
            • 1970-01-01
            • 1970-01-01
            • 2010-09-10
            • 1970-01-01
            • 1970-01-01
            • 2020-01-05
            相关资源
            最近更新 更多