Назад | Перейти на главную страницу

Установить гем mysql для использования в chef-client?

Я пытаюсь развернуть приложение rails с помощью chef, для поваренной книги mysql для создания базы данных требуется mysql драгоценный камень. В mysql gem устанавливается в системе с помощью пакета Ubuntu, но он не может использоваться chef-client который бежит от /opt/chef/embedded.

Я пробовал добавить это:

chef_gem 'mysql' do
    action :nothing
end.run_action(:install)

Но для этого требуется libmysqlclient-dev Пакет Ubuntu для установки. Поэтому я также добавил это перед предыдущим:

package 'libmysqlclient-dev' do
    action :nothing
end.run_action(:install)

Но это делается до apt recipe обновляет репозитории 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)

В mysql::ruby рецепт позволяет устанавливать пакеты через node["mysql"]["client"]["packages"]:

Поэтому включите его в свой список выполнения:

run_list(
  #...
  "recipe[mysql::ruby]",
  #...
)

и укажите свои зависимости в атрибутах:

# this is needed for debian based systems
node["mysql"]["client"]["packages"] = ["build-essential","mysql-client","libmysqlclient-dev"]

На самом деле нет связи между системой управления пакетами Debian и гемом, поэтому ответ, вероятно, такой:

package "libmysqlclient-dev" do
  action :install
end

gem_package "mysql" do
  action :install
end

(The chef_gem Ресурс действительно устанавливает драгоценный камень, но он предназначен только для установки драгоценных камней для использования в рецепте Chef. Смотрите все кровавые подробности на Страница ресурсов для поваров).

Чтобы держать под контролем, я рекомендую использовать Поваренная книга сообщества apt Opscode и добавить recipe[apt] в начало списка запусков для всех узлов.