我们目前正在使用 chef 来配置我们的服务器,并且我们希望我们的食谱/食谱在安装和运行后自动将一些数据添加到 mongo 数据库中。
这是我们开始遇到问题的地方。我们使用执行资源来运行 mongo 脚本,如下所示:
execute "install-mongodb-config" do
command "mongo #{node[:mongodb][:mongo_db_host]}/#{node[:mongodb][:mongo_db]} \"#{node[:mongodb][:mongo_add_config_script]}\""
action :run
end
无论我们尝试什么,这部分食谱总是失败!我不会详细介绍我们在这里尝试的所有内容(除非我需要),但可以说我已经用尽了订阅和通知的所有可能性(我认为)。
问题源于我们使用 mongodb::10gen_repo 来安装 mongodb。当 apt-get 安装软件包时配方退出,然后 chef 继续执行更多资源。
我们尝试在 mongodb::10gen_repo 之后直接执行上述资源,但似乎 mongodb 不可用并且 mongo shell 无法连接并运行脚本。我们看到的错误有点像这样:
MongoDB shell version: 2.0.2
Thu Sep 6 18:40:45 ReferenceError: setTimeout is not defined mongotest.js:2
failed to load: mongoAddConfig.js
我们尝试过的任何事情都无法以一种不错的厨师方式解决这个问题。我们采用的方法是将执行资源替换为以下内容:
execute "install-mongodb-config" do
command "sleep 60; mongo #{node[:mongodb][:mongo_db_host]}/#{node[:mongodb][:mongo_db]} \"#{node[:mongodb][:mongo_add_config_script]}\""
action :run
end
这只是在运行 mongo 脚本之前使命令休眠 60 秒。我知道这不是正确的方法,但它现在有效。
谁能提出正确的方法来做到这一点?我有一种感觉,我需要与创建 mongodb chef 脚本并请求功能的人交谈!