2

我已经阅读了文档,有些事情仍然让我感到困惑,主要与同步文件夹和数据库数据有关。

我想在我的主机上使用以下文件夹结构

ROOT
|- workFolder
||- project1
|||- project1DatabaseAndFiles
|||- project1WebRoot
||- project2
|||- project2DatabaseAndFiles
|||- project2WebRoot
||- project3
|||- project3DatabaseAndFiles
|||- project3WebRoot

然后创建 VM,其中每个 VM 主机 webroot 指向相应的 projectX/projectXWebRoot 文件夹。
根据我的阅读,我只能指定一个远程同步目录。(http://docs.vagrantup.com/v2/synced-folders/)。但是如果我创建一个新的虚拟机,我也想指定项目名称,从而选择正确的主机文件夹。

我所描述的是否可以使用 Vagrant?
如果我希望其他开发人员使用此环境,我希望他们能够即时访问数据库结构/设置等,而无需导入任何 SQL 文件。这可能吗?

我希望我只是不了解 Vagrants 的目的,但这对我来说似乎是对共享 VM 的一种很好的利用。任何可能有帮助的指针或文章都将受到欢迎。

4

1 回答 1

3

根据我的阅读,我只能指定一个远程同步目录。

不,那不是真的。您可以随时添加更多共享文件夹。从 手册

该指令用于在虚拟机上配置共享文件夹,并且可以在 Vagrantfile 中多次使用。

这意味着您可以使用以下方法定义其他共享文件夹:

  config.vm.share_folder "name", "/path/on/vm", "path/on/host"

如果我希望其他开发人员使用此环境,我希望他们能够即时访问数据库结构/设置等,而无需导入任何 SQL 文件。这可能吗?

是的,您可以更改 MySQL 的数据存储路径,将其存储在主机上的共享中,这样当 VM 被破坏时数据不会丢失。

然而,这并不像听起来那么简单。如果您使用的是 MySQL 食谱(再次,假设您使用的是 MySQL),您必须修改它,以便使用 mysql 用户的 uid 和 gid 挂载共享文件夹,否则用户无法写入它. 您可以像这样手动挂载共享:

mount -t vboxsf -o uid=`id -u mysql` -o gid=`id -g mysql` sharename /new/data/dir

此外,如果您使用的是 Ubuntu 或 Debian Wheezy,则需要为 MySQL 配置不同的 Apparmor,因为它不允许写入新配置的数据目录。这可以通过编写

/new/data/dir r,
/new/data/dir/** rwk,

/etc/apparmor/apparmor.d/local/usr.sbin.mysqld. 这个版本的 mysql 食谱已经支持这种行为,所以你可以查看它是如何做到的。

于 2013-05-14T13:47:22.007 回答