Почему возникает ошибка «нет такого файла или каталога», если файл .so существует? - PullRequest
2 голосов
/ 26 октября 2010

Я пытаюсь подключиться из Ruby 1.8.7 на RHEL 5 к MS SQL Server. Я использую FreeTDS и tiny_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 Ответ

2 голосов
/ 26 октября 2010

Как вы установили FreeTDS из исходного кода или из дистрибутива? Я обнаружил, что многие дистрибутивы, основанные на дистрибутиве, не устанавливают необходимые заголовки и файлы разработки, которые используются гемами для поиска необходимых библиотек. Вы можете найти freetds-dev или что-то подобное, если используете дистрибутив, и установить его также.

При установке дистрибутива также возможно, что файлы не были установлены в том же каталоге, в котором они были бы для исходной установки. Я сталкивался с этим пару раз с разными пакетами. У драгоценного камня Tiny TDS могут быть некоторые параметры конфигурации, позволяющие вам определить, где скрываются файлы FreeTDS.

Файл extconf.rb для tiny_tds ищет следующие файлы:

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

Найдите или найдите на своем хосте, чтобы увидеть, можете ли вы найти эти файлы. Согласно extconf.rb библиотеки должны основываться на /lib или /lib/freetds, а заголовки должны быть на /include или /include/freetds.

...