预先填充vagrant同步的文件夹内容

我目前正在构build一个相当复杂的服务器堆栈(Rails应用程序中的ruby),我希望开发人员无需自己安装所有东西即可开始工作。 所以我使用stream浪汉来允许他们这样做。

这个想法是,当你第一次安装镜像的时候,它会提取最新的源代码并安装依赖项,这些源代码会被同步文件夹(一个内build的特性)展现出来,这样开发人员可以在自己的环境中提交源代码并编辑它们。 Vagrant-box仅用于服务器。

Vagrantfile中已同步的文件夹条目:

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

该图像是一个具有新贵脚本的Ubuntu服务器(脚本在启动时执行,只有当Internet连接启动时):

  • 从Github拉最新的开发分支(如果文件夹已经不存在)

  • 安装依赖关系(这由脚本完成)

  • 启动服务器

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

当然,这不是一个安全的方法(如果启动需要10秒以上的时间,尽pipe现在不太可能,但是我不想知道);)

我的问题是:是否有一个更好的方式让guest-host(stream浪者图片)填充同步文件夹?

当然,非常感谢提前!

stream浪者的内置configurationfunction应该是一个完美的适合这个。 有很多方法可以做到这一点,但最简单的方法可能就是把你的Upstart脚本的内容加上一个简单的shell脚本。 然后,将其中一个块放入您的Vagrantfile

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

     $script = <<<SCRIPT // The contents of your script go here SCRIPT config.vm.provision "shell", inline: $script 

    请注意,这里的脚本是在“heredoc”中 ,这意味着您需要小心确保结束heredoc的SCRIPT标记位于正确的位置 – 即单独一行,没有额外的空格。 (关于上面heredoc的链接确实显示了允许空格的方法,但是无论如何你都需要小心。)

  2. 指向一个脚本文件 。 Vagrant会将这个文件复制到/tmp目录并执行它。

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

    请注意这里的path是相对于Vagrantfile位置。 但是 ,该文件不是从该位置执行的,所以如果需要将该文件放在某个目录中,则应按照方法#3进行操作。

  3. 使用指向脚本文件的“内联”脚本。 这样,您可以在选定的位置执行脚本(在下面的示例中,在完成chmod或设置环境variables之类的先决条件后,该脚本处于/vagrant

     $script = <<SCRIPT chmod +x /vagrant/setup.sh cd /vagrant ./setup.sh SCRIPT config.vm.provision "shell", inline: $script 

您也可以使用通过“真正的”部署和configuration系统工作的configuration方法,但取决于您的要求可能是矫枉过正的。