我还没有想出一个令人满意的方法来管理我的Perl应用程序的开发,构建和部署。我想听听你是如何解决这个问题和/或你想在现在没有的应用程序构建系统中想要的。
请描述您的应用程序类型(它是一个Web应用程序,它是在服务器上运行,还是使用PAR或PerlApp捆绑它,以便您可以在perlless系统上运行)。
构建系统应提供的关键事项:
@INC
值执行perl并使用相应的目录应该很容易。make test
或类似的命令,可以很容易地在整个应用程序中进行全局测试。在Perlmonks交叉发布。
答案 0 :(得分:17)
我可以写很多关于这个
的文章控制库 - 我只使用我想要的模块创建自己的CPAN版本。最新版本的App::Cpan具有多项功能,例如加载一次性配置的-j
选项,以帮助解决此问题。完成此操作后,您可以将其分发到具有所有模块的拇指驱动器或CD上,CPAN.pm配置以及您需要的其他所有内容。通过一些编程,您可以创建一个run_me
脚本来实现这一切。
Makefile / Build集成 - 我没有集成Makefile。那是通向灾难的道路。相反,我使用顶级应用程序模块进行集成测试,该模块也会自动测试其所有依赖项。 {c}命令的-t
切换用于测试当前工作目录中的模块:
cpan -t。
您也可以使用各种集成测试框架。您将PERL5LIB设置为空(只有硬编码的@INC目录中的核心模块),因此cpan
必须从头开始安装所有内容。
版本控制友好 - 您使用的内容并不重要。大多数东西都有某种导出,你可以在没有源代码控制的情况下获得所有东西。 Git非常好,因为它在正常情况下只有最小的污染。
跨平台 - 我提到的一切在Windows和Unix上运行得很好。
单个Perl安装 - 这个部分比较棘手,我认为你走错了路。任何时候多个东西都必须依赖于同一个perl,有人会把它搞砸到其他人。我绝对建议不要使用Perl系统进行应用程序开发,这样就不会搞乱系统的运行。每个应用程序至少应将所有非核心模块安装到自己的目录中,这样它们就不会与其他应用程序竞争。
轻松启动 - 这只是一个简单的编程问题。
BONUS:我不使用Module :: Starter。这是错误的方式,因为你必须依赖Module :: Starter认为你应该做的事情。我使用Distribution::Cooker只需要一个Template Toolkit模板目录并对其进行处理,以便为它们提供分发目录。你可以做任何你喜欢的事情。如何获得初始模板取决于您。
答案 1 :(得分:7)
我在一个非常小的网站应用程序上工作,我们正在努力改进我们的部署(从“花一天时间在Windows上设置我们需要的所有模块,然后将文件扔到它上直到一切正常”来改进它),所以这有所改善。)
我们需要做三件事来建立我们的网站:
Module::Starter
制作的Perl模块,其中包含一个Config
模块,用于保存站点范围的配置选项。在安装时,此模块(使用MakeMaker
的{{1}}检查我们所需的所有模块是否已安装)。在此模块之前可以安装任何不需要安装的模块。部署在于我从每个人的Git分支机构中取出并打包一个版本。然后,我们可以将其交给本地或Amazon EC2实例进行测试。一旦我们好好发布,我们要么在最后一个版本上安装它,要么将数据库移到测试实例上并使 新实例。
将此与您的标准进行比较:
PREREQ_PM
来获取以grep
开头的行。use
。prove
,CPAN
和其他工作做得很好所有系统,浪费它似乎是一种耻辱。请注意,这是一个真正的简单网站,没有XS,复杂的Web框架或任何此类。我们也只通过两个版本支持这种设置,因此我们没有足够的经验来了解这将如何工作,因为代码变得更复杂,我们的部署平台变得更加多样化。我非常感谢您对我们系统的任何建议或意见。