代码之家  ›  专栏  ›  技术社区  ›  daotoad

如何管理Perl应用程序的开发、构建和部署?

  •  45
  • daotoad  · 技术社区  · 16 年前

    我还没有想出一个令人满意的方法来管理我的Perl应用程序的开发、构建和部署。我想听听您是如何解决这个问题的,和/或您希望在现在还没有的应用程序构建系统中得到什么。

    请描述您的应用程序类型(它是Web应用程序,是在服务器上运行,还是使用par或perlapp进行捆绑,以便您可以在无Perlless系统上运行)。

    构建系统应提供的关键内容:

    • 库的控制。
      • 应该可以将库分发签出到我的dev目录中,以便在构建中使用它。
      • 使用 @INC 将使用相应目录的值。
      • 应该可以从SystemPerl安装中获得模块列表。
    • 生成文件/生成集成
      • 在整个应用程序中只发布一个全局测试应该很容易 make test 或者类似的命令。
    • 版本控制友好
      • 结构不应干扰cvs、svn和其他版本的正常使用。 控制系统。
    • 跨平台
      • 系统应至少在win32和unix派生的系统上运行。
      • 理想情况下,工具在Perl操作的所有地方都应该具有相同的功能。
    • 单Perl安装
      • 作为设置环境的一部分,不需要将Perl安装到特殊目录中。
    • 轻松启动
      • 启动一个应用程序应该是一个基本上自动化的过程。模块::starter或h2xs中的某些内容应该可以用于布局基本结构和创建任何标准文件。

    交叉邮寄 Perlmonks .

    2 回复  |  直到 16 年前
        1
  •  17
  •   brian d foy    13 年前

    关于这个我可以写很多东西

    1. 库的控制-我用我想要的模块创建了自己的CPAN版本。最新版本的 App::Cpan 具有多个功能,例如 -j 选项加载一次性配置,以帮助解决此问题。一旦您拥有了它,您就可以将它分发到一个具有所有模块、cpan.pm配置以及您所需要的其他一切的拇指驱动器或CD上。通过一点编程,您可以创建一个 run_me 实现一切的脚本。

    2. 生成文件/生成集成-我不集成生成文件。这就是通往灾难的道路。相反,我使用顶级应用程序模块进行集成测试,它也会自动测试所有依赖项。这个 -t 切换到cpan命令对于测试当前工作目录中的模块很有用:

      CPAN-T。

    您也可以使用各种集成测试框架。您将perl5lib设置为空的(在硬编码的@inc目录中只有核心模块),因此 cpan 必须从头开始安装。

    1. 版本控制友好-使用什么并不重要。大多数东西都有某种类型的导出,您可以在没有源代码管理的情况下获得所有东西。git非常好,因为在正常情况下它只有最少的污染。

    2. 跨平台-我提到的所有东西在Windows和Unix上都可以正常工作。

    3. 单Perl安装-这部分比较复杂,我认为你走错了方向。任何时候,当多个事物必须依赖于同一个Perl时,都会有人把它搞得一团糟。我绝对建议不要在应用程序开发中使用SystemPerl,这样就不会破坏系统的运行。至少,每个应用程序都应该将所有非核心模块安装到自己的目录中,这样它们就不会与其他应用程序竞争。

    4. 简单的启动-这只是一个简单的编程问题。

    奖励:我不使用module::starter。这是错误的做法,因为您必须依赖于module::starter认为您应该做什么。我用 Distribution::Cooker 它只需要一个模板工具箱模板的目录,并对其进行处理,以便为它们提供您的分发目录。你可以做任何你喜欢的事。如何获得初始模板取决于您自己。

        2
  •  7
  •   Gaurav    16 年前

    我在一个很小的网站应用程序上工作,我们只是在改进我们的部署(从“花一天时间在Windows上设置我们需要的所有模块,然后将文件扔到它上面,直到一切正常”,这是一些改进)。

    我们需要做三件事来建立我们的网站:

    1. Perl模块使用 Module::Starter 含A Config 保存站点范围配置选项的模块。安装时,此模块(使用 MakeMaker PREREQ_PM 检查我们需要的所有模块是否都已安装)。安装此模块之前不需要安装的任何模块。
    2. 一些需要执行的SQL文件来设置数据库。
    3. 组成网站的PerlCGI文件。只要Apache指向他们,网站就“正常工作”。这包括所有Perl文件使用的公共代码模块。

    部署包括从每个人的git分支中提取并打包一个版本。然后,我们可以在本地或AmazonEC2实例上将其交付测试。一旦我们准备好发布,我们要么在最新版本上安装它,要么将数据库移到测试实例上,并 那个 新实例。

    将此项与您的标准进行比较:

    1. 图书馆的控制:有点。我们非常广泛地使用CPAN模块。为了尝试新版本,我们在生产服务器上进行升级之前先升级自己的模块版本。我们手动维护一个列表,但是由于我们的代码库相当小,所以不难确定使用的模块(通过 grep 以…开头的行 use 例如)。
    2. 生成文件/生成集成:是。任何与makefile相关的事情都是由我们的eu::mm设置完成的。我们没有全局测试,但是由于我们的整个测试套件最近都放在一个文件夹中,希望我们很快就可以运行一些东西。 prove 直接。
    3. 版本控制友好:是的。我们的整个源代码都包含在一个文件夹中,没有太多的重复。
    4. 跨平台:是的。我们在MakeMaker中有很多奇怪的事情可以让我们这样做,但是作为一个初创公司,跨平台代码给了我们宝贵的灵活性。我们尽量使用Perl的核心模块和工具,以及来自CPAN的纯Perl模块。
    5. 单Perl安装:是。我们可以在任何地方处理Perl,并在任何设置下安装,只要Perl自己的所有模块工具都可以工作——我们已经付出了很多努力 CPAN , EU::MM 其他人在所有系统中都工作得很好,浪费它似乎是一种耻辱。
    6. 简单的启动:不是真的。这个系统是从一个包含所有源文件的文件夹和一个包含需要安装的模块列表的文本文件发展而来的(即:不是智能设计的)。虽然正式测试已安装的模块是一个巨大的改进,但我们仍然需要一天的时间来设置它,主要是花在安装我们的必备模块上(并非所有模块都易于在Windows上安装)。我希望用 the Perl Win32 community 尝试解决问题CPAN模块的问题。

    注意,这是一个 真的? 简单的网站,没有XS,复杂的Web框架,或者任何类似的东西。我们也只通过大约两个版本来支持这个设置,所以我们没有足够的经验来说明如何工作,因为代码变得更加复杂,我们的部署平台变得更加多样化。我非常感谢您对我们的系统提出任何建议或意见。