Chef Client Run 在安装 gem 时提供'Failed to build gem native Extension' tiny_tds



我的要求是使用tiny_tds连接到SQLServer数据库,作为在Ubuntu OS上运行的chef客户端运行的一部分。因此,作为此任务的一部分,我编写了一本食谱,其中我在metadata.rb文件中包含了以下行:

gem 'tiny_tds'

这应该按照厨师文档安装 tiny_tds gem。但是,我收到一个错误,说"无法构建 gem 本机扩展"。虽然一些网站建议该问题与 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 

您可能需要安装编译器或 ruby 开发标头。我们不建议对需要 C 扩展的 gem 使用 gem 元数据依赖系统,因为您需要在 Chef 启动之前安装编译器,这通常是 Chef 自己做的事情。对于此类情况,较旧的chef_gem资源通常更好,因为您可以在安装 gem 之前使用 build-essential 等说明书来安装编译器工具。

最新更新