Chef Client Run выдает «Не удалось создать собственное расширение драгоценного камня» при установке драгоценного камня tiny_tds

Мое требование состоит в том, чтобы использовать tiny_tds для подключения к базе данных SQLServer как часть запуска клиента шеф-повара, который работает в ОС Ubuntu. Итак, в рамках этой задачи я написал кулинарную книгу, в которую включил следующую строку в файле metadata.rb:

gem 'tiny_tds'

Это должно установить гем tiny_tds в соответствии с документацией шеф-повара. Но я получаю сообщение об ошибке «Не удалось создать собственное расширение для драгоценных камней». Хотя некоторые сайты предполагают, что проблема связана с FreeTDS, решения недостаточно ясны, чтобы решить эту проблему.

Изменить: добавление дополнительной информации о проблеме

Я также попытался вручную установить freetds с помощью следующих команд:

sudo apt-get install wget
sudo apt-get install build-essential
sudo apt-get install libc6-dev
sudo wget http://www.freetds.org/files/stable/freetds-1.00.21.tar.gz
tar -xzf freetds-1.00.21.tar.gz
cd freetds-1.00.21
sudo ./configure --prefix=/usr/local --with-tdsver=7.3
sudo make
sudo make install

а затем, когда я запускаю команду

gem install tiny_tds 

на терминале он успешно устанавливается с использованием собственных зависимостей.

Но проблема все еще существует, когда я запускаю клиент шеф-повара с помощью команды

sudo chef-client -o "recipe[tiny_tds_cookbook]"

Отслеживание стека:

ERROR:  Error installing tiny_tds:
ERROR: Failed to build gem native extension.

current directory: /opt/chef/embedded/lib/ruby/gems/2.3.0/gems/tiny_tds-2.1.1/ext/tiny_tds
/opt/chef/embedded/bin/ruby -r ./siteconf20180121-23372-1r1mxpl.rb extconf.rb
checking for sybfront.h... yes
checking for sybdb.h... yes
checking for tdsdbopen() in -lsybdb... no
checking for dbanydatecrack() in -lsybdb... no
Failed! Do you have FreeTDS 0.95.80 or higher installed?
extconf.rb failed 

person Yoda    schedule 20.01.2018    source источник


Ответы (1)


Вероятно, вам нужно установить либо компилятор, либо заголовки разработки ruby. Мы не рекомендуем использовать систему зависимостей метаданных драгоценных камней для драгоценных камней, которым требуются расширения C, поскольку вам потребуется установить компилятор до запуска Chef, что обычно делает Chef сам. Для таких ситуаций старый ресурс chef_gem обычно лучше, потому что вы можете использовать кулинарную книгу, например build-essential, для установки инструментов компилятора перед установкой драгоценного камня.

person coderanger    schedule 20.01.2018
comment
Даже подход chef_gem дает ту же ошибку. В настоящее время я работаю только с 1 поваренной книгой с вызовом chef_gem внутри моего рецепта по умолчанию для целей тестирования. Вы предлагаете иметь другой рецепт (который включен первым), который использует build-essential для установки инструментов компилятора. Нативная зависимость в этом случае — это «freetds». Не могли бы вы привести пример кода для достижения этого? - person Yoda; 21.01.2018
comment
Вам придется написать код самостоятельно, так как особенности зависят от того, что именно нужно установить вашему гему, чтобы скомпилировать его расширение. - person coderanger; 21.01.2018