3

我有一个预装了 PHP、Apache2 和 MySQL 的自定义虚拟机基础盒。所以我可以使用这个盒子启动虚拟机,它不需要从 Chef Cookbooks 安装上述任何内容。

但是,我正在尝试安装一本 Chef Cookbook,但它失败了。我尝试安装的 Cookbook 运行一个 PHP 脚本,该脚本连接并使用 MySQL 数据库。

它失败的原因是因为PHP无法连接到mysql服务器。我认为这是因为在脚本尝试连接时 MySQL 尚未启动(或准备好)。它仅在我启动 VM 时失败。当我提供它(流浪者提供)时,它可以工作。所以这就是为什么我认为当 PHP 脚本尝试连接时 MySQL 还没有准备好。

错误:

mysql_connect(): 无法通过socket '/var/run/mysqld/mysqld.sock' (2) in .....

厨师食谱食谱中的代码:

execute "doInstall" do
  cwd "/vagrant"
  command "php path/to/my/script.php"
end

有任何想法吗?

4

1 回答 1

1

也许你可以做一个

service "mysql" do
  action :start, :immediately
end

在你的食谱开始时,或者只是做一个启发式

execute "doInstall" do
  cwd "/vagrant"
  command "sleep 10; php path/to/my/script.php"
end

这对我来说似乎有点脏,但可能会很快解决您的问题。

于 2013-03-19T17:27:01.823 回答