安装 `mysql` gem 以在 `chef-client` 中使用吗?

Tad*_*der 1 mysql chef gem

我正在尝试使用厨师部署 Rails 应用程序,对于 mysql 食谱来创建数据库,它需要mysqlgem。所述mysql宝石安装系统范围通过使用Ubuntu的软件包,但是这不是通过使用chef-client从运行/opt/chef/embedded

我试过添加这个:

chef_gem 'mysql' do
    action :nothing
end.run_action(:install)
Run Code Online (Sandbox Code Playgroud)

但这需要libmysqlclient-dev安装 Ubuntu 包。因此我也在之前添加了这个:

package 'libmysqlclient-dev' do
    action :nothing
end.run_action(:install)
Run Code Online (Sandbox Code Playgroud)

但这是在apt配方更新 apt 存储库之前完成的,因此安装libmysqlclient-dev失败。

这些“黑客”看起来很难看,我无法找到apt-get update在正确的时间运行它们的方法。

有人可以帮我找到正确的(最像厨师的)方法来解决我的问题(实际问题是使用application食谱创建数据库)?

更新

我已经能够解决这个食谱的问题作为一个丑陋的黑客......我仍在寻找更好的解决方案:

execute "apt-get update" do
  ignore_failure true
  action :nothing
end.run_action(:run)

node.set['build_essential']['compiletime'] = true
include_recipe "build-essential"

%w{build-essential mysql-client libmysqlclient-dev}.each do |p|
  package p do
    action :nothing
  end.run_action(:install)
end

chef_gem 'mysql' do
  action :nothing
end.run_action(:install)
Run Code Online (Sandbox Code Playgroud)

小智 5

mysql::ruby配方允许通过node["mysql"]["client"]["packages"]以下方式安装软件包:

因此,将其包含在您的运行列表中:

run_list(
  #...
  "recipe[mysql::ruby]",
  #...
)
Run Code Online (Sandbox Code Playgroud)

并在属性中指定您的依赖项:

# this is needed for debian based systems
node["mysql"]["client"]["packages"] = ["build-essential","mysql-client","libmysqlclient-dev"]
Run Code Online (Sandbox Code Playgroud)