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