当.so文件存在时,为什么会出现“没有这样的文件或目录”错误?

时间:2010-10-25 22:33:31

标签: ruby-on-rails sql-server ruby freetds

我正在尝试从RHEL 5上的Ruby 1.8.7连接到MS SQL Server。我正在使用FreeTDStiny_tds RubyGem。

我在OS X上运行良好。

在Linux上我安装了FreeTDS并确认它可以从命令行连接到SQL Server没问题。 gem install tiny_tds很顺利。

但是,当我部署到Linux并尝试打开Rails控制台时,我收到此错误:

$ script/console production
Loading production environment (Rails 2.3.5)
libsybdb.so.5: cannot open shared object file: No such file or directory - /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/tiny_tds-0.2.1/lib/tiny_tds/tiny_tds.so
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/tiny_tds-0.2.1/lib/tiny_tds/tiny_tds.so
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
/opt/deployed_rails_apps/employeedata/releases/20101025214030/vendor/rails/activesupport/lib/active_support/dependencies.rb:158:in `require'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/tiny_tds-0.2.1/lib/tiny_tds.rb:7
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

etc...

我检查过它说它找不到的文件确实存在于文件系统上......

/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems \
    /tiny_tds-0.2.1/lib/tiny_tds/tiny_tds.so

任何想法如何让这个工作?

1 个答案:

答案 0 :(得分:2)

您是如何从源代码或分发版安装FreeTDS的?我发现许多基于发行版的安装都不会安装所需的头文件和开发文件,这些文件由gem用于查找所需的库。如果你使用了发行版,你可能会寻找一个freetds-dev或类似的东西,并安装它。

也可以通过发行版安装将文件安装在与源安装相同的目录中。我用不同的包装碰到了几次。 Tiny TDS gem可能有一些配置选项,可以让您定义FreeTDS文件隐藏的位置。

tiny_tds的extconf.rb文件正在寻找这些文件:

FREETDS_LIBRARIES = ['sybdb']
FREETDS_HEADERS = ['sqlfront.h', 'sybdb.h', 'syberror.h']

在主机上找到或查找是否可以找到这些文件。根据extconf.rb,库应位于/lib/lib/freetds,标题应位于/include/include/freetds