ubuntu – 预先填充vagrant synced文件夹内容

前端之家收集整理的这篇文章主要介绍了ubuntu – 预先填充vagrant synced文件夹内容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在构建一个相当复杂的服务器堆栈(rails应用程序上的 ruby),我希望开发人员能够在不必自行安装所有内容的情况下继续工作.因此,我使用Vagrant来允许他们这样做.

我们的想法是,当您第一次安装映像时,它将提取最新的源并安装依赖项,这些源由同步文件夹(在vagrant中构建的一个功能)公开,以便开发人员可以在自己的环境中提交源代码并对其进行编辑. Vagrant-Box仅适用于服务器.

Vagrantfile中的同步文件夹条目:

config.vm.synced_folder "gameeso/","/var/gameeso",:create => "true"

该映像是一个ubuntu服务器,带有一个upstart脚本(脚本在启动时执行,只有当Internet连接启动时):

>从Github拉出最新的开发分支(如果文件夹不存在)
>安装依赖项(这由脚本完成)
>启动服务器

所有这些都发生在同步文件夹中.我在使用这种方法时遇到了一些问题,主要是Vagrant清除了访客系统上的同步文件夹.
我通过在upstart脚本中添加“sleep 10”解决了这个问题,因此它可以等到Vagrant设置同步文件夹.

当然,这不是一种安全的方法(如果启动时间超过10秒,尽管这些天不太可能,我宁愿不想发现;))

我的问题是:有没有更好的方法让guest-host(vagrant图像)填充同步文件夹?

当然,非常感谢!

Vagrant内置的 provisioning功能应该是完美的选择.有很多方法可以做到,但最简单的方法可能就是采用Upstart脚本的内核并使它们成为一个简单的shell脚本.然后,将其中一个块放入您的Vagrantfile中:

>使用“内联”脚本. Vagrant会将Vagrantfile中的内容复制到/ tmp目录中的脚本中并执行它.

$script = <<<SCRIPT
// The contents of your script go here
SCRIPT

config.vm.provision "shell",inline: $script

请注意,此处的脚本位于“heredoc”内,这意味着您需要小心确保结束heredoc的SCRIPT令牌位于正确的位置 – 即在一行上,没有额外的空格. (关于heredoc的链接确实显示了允许空格的方法,但无论如何你都要小心.)
>指向脚本文件. Vagrant会将此文件复制到/ tmp目录并执行它.

config.vm.provision "shell",path: "setup.sh"

请注意,此处的路径相对于Vagrantfile位置.但是,该文件不是从该位置执行的,因此如果您需要该文件位于某个目录中,则应遵循方法#3.
>使用指向脚本文件的“内联”脚本.这样,您就可以在选定的位置执行脚本(在下面的示例中,在您完成chmod或设置环境变量等先决条件后,在/ vagrant中).

$script = <<SCRIPT
chmod +x /vagrant/setup.sh
cd /vagrant
./setup.sh
SCRIPT

config.vm.provision "shell",inline: $script

您还可以使用通过“真实”部署和配置系统工作的配置方法,但这取决于您的要求可能是过度的.

猜你在找的Ubuntu相关文章