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

我还没有想出一个令人满意的方式来管理我的Perl应用程序的开发,构建和部署。 我想听听你是如何解决这个问题和/或你想在现在没有的应用程序构建系统中拥有的。

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

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

  • 控制图书馆。
  • 应该可以检查一个库发布到我的开发目录中,以便在我的构建中使用它。
  • 使用@INC值执行perl应该很容易,该值将使用适当的目录。
  • 应该有可能获得来自系统perl安装的模块列表。
  • Makefile / Build集成
  • 在整个应用程序中进行全局测试应该很容易,只需发出一个make test或类似的命令。
  • 版本控制友好
  • 结构不应该妨碍CVS,SVN和其他版本控制系统的正常使用。
  • 跨平台
  • 系统应至少在Win32和Unix衍生系统上运行。
  • 理想情况下,工具应该在perl运行的所有地方以相同的方式运行。
  • 单一的Perl安装
  • 作为设置环境的一部分,不应该需要将perl安装到特殊目录中。
  • 轻松启动
  • 启动一个应用程序应该是一个主要是自动化的过程 应该可以使用Module :: Starter或h2xs中的某些功能来布局基本结构并创建任何标准文件。
  • 在Perlmonks上交叉发布。


    有很多我可以写这个

  • 控制库 - 我只用我想要的模块创建我自己的CPAN版本。 最新版本的App :: Cpan具有多种功能,例如加载一次性配置的-j选项,以帮助完成此操作。 一旦你有了这个,你可以将它分发到一个带有所有模块,CPAN.pm配置和你需要的其他东西的拇指驱动器或CD上。 通过一些编程,您可以创建一个run_me脚本,使其发生。

  • Makefile / Build集成 - 我没有集成Makefiles。 这是通向灾难的道路。 相反,我会使用顶级应用程序模块进行集成测试,该模块会自动测试其所有依赖项。 -t切换到cpan命令对于在当前工作目录中测试模块很有用:

    cpan -t。

  • 有各种各样的集成测试框架,您也可以使用。 您将PERL5LIB设置为空(仅在硬编码的@INC目录中包含核心模块),因此cpan必须从头开始安装所有内容。

  • 版本控制友好 - 它使用什么并不重要。 大多数东西都有某种导出方式,你可以在没有源代码控制的情况下获得所有东西。 Git非常好,因为它在正常情况下只有最小的污染。

  • 跨平台 - 我提到的所有东西在Windows和Unix上都能很好地工作。

  • 单一的Perl安装 - 这一部分更加棘手,我认为你会走错方向。 任何时候多个东西都必须依赖于相同的perl,有人会为其他人解决它。 我绝对建议不要使用系统Perl进行应用程序开发,所以你不要搞乱系统的运行。 至少,每个应用程序都应该将所有非核心模块安装到自己的目录中,这样它们就不会与其他应用程序竞争。

  • 轻松启动 - 这只是一个简单的编程问题。

  • 奖金:我不使用Module :: Starter。 这是一种错误的方式,因为你必须依赖Module :: Starter认为你应该做的事情。 我使用Distribution :: Cooker,它只需要一个Template Toolkit模板的目录并对它们进行处理以将它们分配给您的分发目录。 你可以做任何你喜欢的事情。 你如何得到最初的模板取决于你。


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

    我们有三件事情需要我们设置我们的网站:

  • 使用Module::Starter制作的Perl模块,其中包含一个Config模块,用于存放站点范围的配置选项。 在安装时,这个模块(使用MakeMakerPREREQ_PM来检查我们需要的所有模块是否已经安装)。 在安装此模块之前,不需要安装任何模块。
  • 需要执行几个SQL文件来设置数据库。
  • 构成网站的Perl CGI文件。 只要Apache指向他们,网站“正常工作”。 这包括所有Perl文件使用的通用代码模块。
  • 部署包括我从每个人的Git分支中拉出并打包一个版本。 然后,我们可以将其交给本地或Amazon EC2实例进行测试。 一旦我们可以发布,我们可以将它安装在最后一个版本上,或者将数据库移动到测试实例上并创建新实例。

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

  • 控制库:有点。 我们非常广泛地使用CPAN模块。 要尝试新版本,我们在生产服务器上进行升级之前升级我们自己的模块版本。 我们手动维护一个列表,但由于我们的代码库相当小,因此不难发现哪些模块正在被使用(例如,通过从use开始就use grep ing)。
  • Makefile / Build集成:是的。 任何Makefile相关的东西都是由我们的EU :: MM设置完成的。 我们没有整体测试,但由于我们的整个测试套件最近一个文件夹中结束了,希望我们很快就会有东西可以运行prove直接。
  • 版本控制友好:是的。 我们的整个源代码包含在一个文件夹中,没有太多重复。
  • 跨平台:是的。 我们在MakeMaker中发生了许多奇怪的事情,以使我们能够做到这一点,但作为一家初创公司,跨平台代码为我们提供了宝贵的灵活性。 我们尽可能使用Perl的核心模块和工具,以及来自CPAN的纯Perl模块。
  • 单一的Perl安装:是的。 我们可以在任何地方处理Perl,并且可以在任何设置下安装Perl,只要所有的Perl自己的模块工具都可以工作 - 在获得CPANEU::MM和其他工作在所有系统上的良好运行方面已经付出了很多努力,而且它似乎是一种耻辱浪费它。
  • 轻松启动:不是真的。 该系统从所有源文件的单个文件夹和带有需要安装的模块列表的文本文件演变而来(即:未被智能设计)。 虽然对安装的模块进行正式测试是一项巨大的改进,但仍然需要我们花一些时间才能完成设置,主要是安装我们的必备模块(并非所有模块都易于在Windows上安装)。 我希望使用Perl Win32社区来解决有问题的CPAN模块问题。
  • 请注意,这是一个非常简单的网站,没有XS,复杂的Web框架或其他任何类型的网站。 我们也只通过两个版本来支持这个设置,所以我们没有足够的经验来确定这会如何工作,因为代码变得更加复杂,我们的部署平台变得更加多样化。 我真的很感谢我们的系统上的任何建议或意见。

    链接地址: http://www.djcxy.com/p/54575.html

    上一篇: How do manage your Perl application development, build, and deployment?

    下一篇: How can I package my Perl script to run on a machine without Perl?