如何在第一次流浪期间配置个人数据库?

时间:2016-08-04 12:12:58

标签: vagrant vagrantfile vagrant-provision

我们的项目仓库中有一台多机Vagrantfile,用于设置LAMP堆栈并创建一些常见的MySQL数据库。现在,我们每个人都有一个个人数据库,我们希望Vagrant在最初的“vagrant up”配置中创建。我已将我的个人配置代码放在〜/ .vagrant.d / Vagrantfile中,但根据Vagrantfiles的加载顺序,该代码在公共Vagrantfile的配置代码之前运行。我的个人配置代码无法添加任何MySQL数据库,因为MySQL还没有安装,因为这是普通Vagrantfile的责任。

如何让普通的Vagrantfile安装MySQL,并且一旦MySQL到位,个人Vagrantfile就会添加数据库?

更新 这就是我最终要做的事情。

Vagrantfile(与其他开发者共享):

Vagrant.configure("2") do |config|

  config.vm.define "dev14" do |dev14|

    dev14.vm.box = "ubuntu/trusty64"

    dev14.vm.provision "file", source: "common.sql", destination: "common.sql"

    dev14.vm.provision "shell", inline: <<-SHELL

      sudo apt-get update
      sudo apt-get install -y apache2
      sudo apt-get install -y php5
      sudo apt-get install -y mysql-server
      sudo apt-get install -y mysql-client

      mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS common"
      mysql -uroot -proot common < common.sql

    SHELL

    # User specific provisioning
    $dev14 = dev14
    load './provision.dev14.rb' if File.exists?('./provision.dev14.rb')

  end

end

provision.dev14.rb(我的个人配置文件,Git被忽略):

$dev14.vm.provision "file", source: "personal.sql", destination: "personal.sql"

$dev14.vm.provision "shell", inline: <<-SHELL

  mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS personal"
  mysql -uroot -proot personal < personal.sql

SHELL

这些当然是经过消毒和简化的摘录。

1 个答案:

答案 0 :(得分:2)

我们发现最简单的解决方案是指定多个配置脚本并让“创建数据库”Vagrant文​​件脚本检测它是否需要执行任何操作。

另外,您可以参考个性化阶段吗?在ENV ['DB_USERNAME']上创建基础数据库等?这将使您可以从尝试彼此的设置中受益。

除此之外,您还可以编写一个插件,以便更好地控制正在运行的Vagrant操作,并将其挂钩到事件/事件之前的事件。