我如何在第一次 vagrant up 期间提供个人数据库?
How do I provision a personal database during first vagrant up?
我们的项目回购中有一个多机 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
这些当然是经过净化和简化的摘录。
我们发现最简单的解决方案是指定多个配置脚本并让您的 'create the database' Vagrant 文件脚本检测它是否需要执行任何操作。
此外,您能否参数化个性化阶段,例如在 ENV['DB_USERNAME'] 等基础上创建数据库?这将使您从尝试彼此的设置中受益。
除此之外,您还可以编写一个插件来更好地控制哪个 Vagrant 动作是 运行 并挂接到 pre/post 动作事件。
我们的项目回购中有一个多机 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
这些当然是经过净化和简化的摘录。
我们发现最简单的解决方案是指定多个配置脚本并让您的 'create the database' Vagrant 文件脚本检测它是否需要执行任何操作。
此外,您能否参数化个性化阶段,例如在 ENV['DB_USERNAME'] 等基础上创建数据库?这将使您从尝试彼此的设置中受益。
除此之外,您还可以编写一个插件来更好地控制哪个 Vagrant 动作是 运行 并挂接到 pre/post 动作事件。