2010-10-25 2 views
2

Я пытаюсь подключиться с Ruby 1.8.7 на RHEL 5 до MS SQL Server. Я использую FreeTDS и tiny_tds RubyGem.Почему существует ошибка «нет такого файла или каталога», когда файл .so существует?

Я получил это работает отлично на 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 

Любые идеи, как заставить это работать?

+0

Удивительно, но вы убедились, что это не символическая ссылка на то, чего не существует? – Pointy

+0

Не символическая ссылка. Файл tiny_tds.so находится в ожидаемом месте. – Ethan

ответ

2

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

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

extconf.rb файл для tiny_tds ищет эти файлы:

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

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

+0

Спасибо. Я построил его из источника. – Ethan

+0

Я в конечном итоге часто это делаю. Распределения хороши, но часто путают проблему, когда вы пытаетесь их построить, а затем я трачу часы, пытаясь понять, как спасти вещи, и либо в конечном итоге добавить материал -dev, либо удалить все это и использовать источник. –

+1

запустите эту команду/sbin/ldconfig/usr/local/lib – vajapravin