我们的想法是,当您第一次安装映像时,它将提取最新的源并安装依赖项,这些源由同步文件夹(在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会将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
您还可以使用通过“真实”部署和配置系统工作的配置方法,但这取决于您的要求可能是过度的.