Chef Client Run提供了“无法构建gem native Extension'同时安装tiny_tds gem

时间:2018-01-20 10:03:29

标签: ruby-on-rails ruby rubygems chef tiny-tds

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

gem 'tiny_tds'

这应该按照厨师文档安装tiny_tds gem。但是,我收到一条错误消息,说“无法构建gem native Extension'”。虽然有些网站建议该问题与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 

1 个答案:

答案 0 :(得分:1)

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