我正在研究如何将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上几乎不可能。
那么,问题是:有没有解决第二和第三种方法的问题?更具体地说,如何创建一个隔离和易于复制的环境,并享受在主机上开发的所有舒适性?
我喜欢将所有开发相关的东西隔离在虚拟机中的想法,但我还没有找到一个有效的工作方式。基本上,我看到有三种设置方法:
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上几乎不可能。
那么,问题是:有没有解决第二和第三种方法的问题?更具体地说,如何创建一个隔离和易于复制的环境,并享受在主机上开发的所有舒适性?