use*_*756 5 ubuntu ruby-on-rails upstart vagrant
我目前正在构建一个相当复杂的服务器堆栈(一个 ruby on rails 应用程序),我希望开发人员能够在不必自己安装所有东西的情况下工作。因此我使用 Vagrant 来允许他们这样做。
这个想法是,当您第一次安装映像时,它将拉取最新的源并安装依赖项,源通过同步文件夹公开(vagrant 内置功能),以便开发人员可以提交源并在他们自己的环境中编辑它们。Vagrant-box 仅用于服务器。
Vagrantfile 中的同步文件夹条目:
config.vm.synced_folder "gameeso/", "/var/gameeso", :create => "true"
Run Code Online (Sandbox Code Playgroud)
该图像是一个带有 upstart 脚本的 Ubuntu 服务器(脚本在启动时执行,并且仅在 Internet 连接启动时执行):
从 Github 拉取最新的开发分支(如果文件夹不存在)
安装依赖项(这是由脚本完成的)
所有这些都发生在一个同步文件夹中。我对这种方法有一些问题,主要是 Vagrant 清除了我的来宾系统上的同步文件夹。 我通过在 upstart 脚本中添加 'sleep 10' 解决了这个问题,所以它可以等到 Vagrant 设置同步文件夹。
当然,这不是一种安全的方法(如果启动时间超过 10 秒,虽然现在不太可能,我宁愿不知道;))
我的问题是:有没有更好的方法让来宾主机(流浪者图像)填充同步文件夹?
当然,非常感谢提前!
Vagrant 的内置配置功能应该非常适合这一点。有很多方法可以做到这一点,但最简单的可能是利用 Upstart 脚本的核心内容并将其制作为普通的 shell 脚本。然后,将这些块之一放入您的Vagrantfile:
使用“内联”脚本。Vagrant 会将内容从 复制Vagrantfile到目录中的脚本中/tmp并执行它。
$script = <<<SCRIPT
// The contents of your script go here
SCRIPT
config.vm.provision "shell", inline: $script
Run Code Online (Sandbox Code Playgroud)
请注意,此处的脚本位于“heredoc”内,这意味着您需要小心确保SCRIPT结束heredoc的标记位于正确的位置 - 即单独位于一行,没有额外的空格。(上面关于heredoc的链接确实显示了一种允许空格的方法,但无论如何你都需要小心。)
指向一个脚本文件。Vagrant 会将这个文件复制到/tmp目录中并执行它。
config.vm.provision "shell", path: "setup.sh"
Run Code Online (Sandbox Code Playgroud)
注意,这里的路径是相对于Vagrantfile位置的。 然而,该文件不是从该位置执行的,因此如果您需要该文件位于某个目录中,您应该遵循方法#3。
使用指向脚本文件的“内联”脚本。 这样,您可以在选定的位置执行脚本(在下面的示例中,这是在/vagrant完成先决条件(例如chmod或设置环境变量)之后)。
$script = <<SCRIPT
chmod +x /vagrant/setup.sh
cd /vagrant
./setup.sh
SCRIPT
config.vm.provision "shell", inline: $script
Run Code Online (Sandbox Code Playgroud)您还可以使用通过“真实”部署和配置系统工作的配置方法,但根据您的要求,这可能是多余的。
| 归档时间: |
|
| 查看次数: |
1225 次 |
| 最近记录: |