使用Vagrant作为开发环境的一部分

5
我正在研究如何将vagrant添加到我的开发环境中。我主要使用python进行Web开发,我对与Python相关的具体内容很感兴趣,但这个问题更加普遍。
我喜欢将所有开发相关的东西隔离在虚拟机中的想法,但我还没有找到一个有效的工作方式。基本上,我看到有三种设置方法:
1. 将所有服务(例如数据库服务器、MQ等)以及正在开发的应用程序都运行在VM中。开发人员会ssh到VM并在那里编辑源代码,在ssh终端中运行应用程序、测试等。 2. 与第一种方式相同,但是使用映射目录在主机上编辑源代码并使用正常的GUI编辑器。通过ssh在vagrant上运行应用程序和测试。这似乎是使用vagrant最流行的方式。 3. 在VM中仅托管外部服务。将应用程序依赖项安装到主机上的virtualenv中,并从那里运行应用程序和测试。
所有这些方法都有自己的缺点: 1. 在文本控制台中进行开发非常不方便,这对我来说就是一个停滞点。虽然我是一个经验丰富的Vim用户,可以应付,但我不能向任何习惯于使用任何图形IDE的人推荐这种方法。 2. 您可以使用熟悉的工具进行开发,但是您不能使用自动完成,因为所有python库都安装在VM中。您的traceback将指向非本地文件。您将无法在编辑器中打开库源代码,ctags也无法工作。 3. 大多数“隔离”功能都丢失了:您必须自己安装所有编译器、*-dev库以安装python依赖项并运行应用程序。这在Linux上非常容易,但在OSX上设置它们可能会更加困难,在Windows上几乎不可能。
那么,问题是:有没有解决第二和第三种方法的问题?更具体地说,如何创建一个隔离和易于复制的环境,并享受在主机上开发的所有舒适性?

我也有类似的想法。你找到了好的解决方案吗?最近我一直在思考Docker(或更普遍的Linux容器)可能提供更好的系统,但我还没有测试过。 - Paulo Almeida
就我个人而言,我使用上述的第三个选项。我的所有开发人员都使用Ubuntu,因此我们有幸拥有相似的主机配置。所以我们只需安装一堆Ubuntu软件包即可轻松搞定。我得出结论,为了实现开发环境的独立性,你必须做出这些牺牲。只有当选项3的持续价格变得太高(即您必须支持太多的开发环境变体)时,才有意义切换到选项1或2。但我仍然会关注它。如果Docker能解决其中至少一些问题,请告诉我! - Andrey Lebedev
我的问题在于如果不同的项目有冲突的依赖关系该怎么办。现在我意识到PyCharm通过允许远程Python解释器与Vagrant一起使用。当然,这是针对Python的,可能会将您绑定到IDE上(我不知道其他是否支持此功能)。使用Docker,我希望您可以为每个项目拥有一个开发环境,并配备GUI编辑器。当然,您已经可以使用其他虚拟化方法来实现这一点,但性能成本更高。 - Paulo Almeida
1个回答

0
在大多数IDE中,您可以添加位于项目之外的“库”路径,以便您的代码完成等功能正常工作。关于回溯,我对Python不熟悉,但这听起来像是通过在服务器和开发机器之间“映射”路径来解决的问题。这通常是为什么#2经常是最好的选择的原因(除非您有一个愿意执行#1的团队)。

你可以在项目外添加库路径,但不能在虚拟机内部添加,除非你在 Vagrant 实例和主机之间共享的文件夹比代码目录更广泛(我想你可以这样做,但我还没有考虑足够是否实用)。 - Paulo Almeida

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接