如何pipe理你的Perl应用程序的开发,构build和部署?
我还没有想出一个令人满意的方式来pipe理我的Perl应用程序的开发,构build和部署。 我想听听你是如何解决这个问题和/或你想在现在没有的应用程序构build系统中拥有什么。
请描述您的应用程序types(是Web应用程序,是否在服务器上运行,还是使用PAR或PerlApp进行捆绑,以便可以在perlless系统上运行)。
构build系统应该提供的关键内容是:
- 控制图书馆。
- 应该可以检查一个库发布到我的开发目录中,以在我的构build中使用它。
- 用
@INC
值执行perl应该很容易,它将使用适当的目录。 - 应该可以从系统perl安装中获取源代码模块列表。
- Makefile / Build集成
- 在整个应用程序中进行全局testing应该很容易,只需发出一个
make test
或类似的命令。
- 在整个应用程序中进行全局testing应该很容易,只需发出一个
- 版本控制友好
- 结构不应该干扰CVS,SVN等版本控制系统的正常使用。
- 跨平台
- 系统应该至less在Win32和Unix衍生系统上运行。
- 理想情况下,工具应该在perl运行的所有地方以相同的方式运行。
- 单一的Perl安装
- 作为设置环境的一部分,不应该有必要将perl安装到特定的目录中。
- 轻松启动
- 启动应用程序应该是一个大部分是自动化的过 应该可以使用Module :: Starter或h2xs中的某些东西来布局基本结构并创build任何标准文件。
在Perlmonks上交叉发布。
有很多我可以写这个
-
控制库 – 我只用我想要的模块创build我自己的CPAN版本。 最新版本的App :: Cpan有几个function,比如加载一次性configuration的
-j
选项,以帮助解决这个问题。 一旦你有了这个,你可以分发它的拇指驱动器或CD,其中包含所有的模块,CPAN.pmconfiguration,以及你需要的一切。 有了一点编程,你就可以创build一个run_me
脚本,让所有的事情都发生。 -
Makefile / Build集成 – 我不集成Makefiles。 这是通往灾难的道路。 相反,我使用顶层应用程序模块进行集成testing,该模块也会自动testing所有依赖关系。
-t
切换到cpan命令对于在当前工作目录中testing模块很有用:cpan -t。
有各种各样的综合testing框架,你也可以使用。 您将PERL5LIB设置为空(仅在硬编码的@INC目录中包含核心模块),因此cpan
必须从头开始安装所有内容。
-
版本控制友好 – 这不关你用什么。 大多数东西都有某种导出方式,你可以在没有源代码控制的情况下得到所有东西。 Git是非常好的,因为它在正常情况下只有最小的污染。
-
跨平台 – 我所提到的一切在Windows和Unix上都能很好地工作。
-
单一的Perl安装 – 这一部分更棘手,我认为你会错误的方式。 任何时候多个东西都必须依赖于相同的perl,有人会把它搞乱。 我绝对build议不要使用系统Perl进行应用程序开发,所以你不要搞乱系统的运行。 至less,每个应用程序都应该将所有非核心模块安装到自己的目录中,以免与其他应用程序竞争。
-
轻松启动 – 这只是一个简单的编程问题。
奖金:我不使用Module :: Starter。 这是错误的方法,因为你必须依赖Module :: Starter认为你应该做的事情。 我使用Distribution :: Cooker ,它只需要一个Template Toolkit模板的目录,并对它们进行处理,使其成为您的分发目录。 你可以做任何你喜欢的事情。 你如何得到最初的模板取决于你。
我在一个非常小的网站应用程序上工作,我们正在努力改进我们的部署(从“在Windows上设置所有我们需要的模块中花费一天的时间,然后将文件扔到其中,直到一切正常”,从而改进它改善)。
我们有三件事情需要我们设置我们的网站:
- 使用
Module::Starter
Perl模块,其中包含一个Config
模块,用于存放站点范围的configuration选项。 在安装时,这个模块(使用MakeMaker
的PREREQ_PM
检查我们需要的所有模块已经安装)。 在安装该模块之前,不需要安装任何模块。 - 几个需要执行的SQL文件来设置数据库。
- 构成网站的Perl CGI文件。 只要Apache指向他们,网站“正常工作”。 这包括所有Perl文件使用的通用代码模块。
部署包括我从每个人的Git分支拉出并打包一个版本。 然后,我们可以在本地或在Amazon EC2实例上交付testing。 一旦我们释放好了,我们就可以将它安装在最后一个版本上,或者将数据库移到testing实例上,然后创build新的实例。
比较这与你的标准:
- 控制库:有点。 我们使用CPAN模块相当广泛。 要尝试新版本,我们在生产服务器上进行升级之前升级我们自己的模块版本。 我们手动维护一个列表,但是由于我们的代码库相当小,不难发现哪些模块正在被使用(例如,通过从
use
开始的代码来查找)。 - Makefile / Build集成:是的。 任何Makefile相关的东西都是由我们的EU :: MM设置完成的。 我们没有全局testing,但是由于我们的整个testing套件最近都在一个文件夹中,所以希望我们很快就能有一些可以直接运行的东西。
- 版本控制友好:是的。 我们的整个源代码包含在一个文件夹中,没有太多的重复。
- 跨平台:是的。 我们在MakeMaker中发生了许多奇怪的事情,以便让我们做到这一点,但作为一个初创公司,跨平台的代码给了我们宝贵的灵活性。 我们尽可能使用Perl的核心模块和工具,以及来自CPAN的Pure Perl模块。
- 单个Perl安装:是的。 我们可以在任何地方处理Perl,并且可以在任何设置下进行安装,只要所有的Perl自己的模块工具都可以工作 – 在获得
CPAN
,EU::MM
和其他所有系统的良好运行方面已经付出了很多努力,似乎是一种耻辱浪费它。 - 轻松启动:不是。 该系统从所有源文件的单个文件夹和具有需要安装的模块列表的文本文件演变而来(即:未被智能devise)。 虽然对已安装模块进行正式的testing是一个巨大的改进,但是我们仍然需要花一些时间来设置这些模块,主要是安装我们的必备模块(并非所有的模块都易于在Windows上安装)。 我希望能够使用Perl Win32社区来解决有问题的CPAN模块问题。
请注意,这是一个非常简单的网站,没有XS,复杂的networking框架,或任何这样的。 我们也只是通过两个版本来支持这个设置,所以我们没有足够的经验去做,因为代码变得更复杂,我们的部署平台变得更加多样化。 我真的很感激我们的系统上的任何build议或意见。