2014-04-03 3 views
4

Это кажется таким простым, но я не могу закрыть этот последний пробел. Недавно я добавил GSL в свое приложение на базе Heroku через Heroku buildpack for GSL/Ruby. И buildpack и связанной с GSL камень появляются установить только штраф за сокращенным нажимной выход ниже:Настройка правильного пути на Heroku для библиотеки поставщика

$git push staging master 
Fetching repository, done. 
Counting objects: 7, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (4/4), done. 
Writing objects: 100% (4/4), 476 bytes, done. 
Total 4 (delta 3), reused 0 (delta 0) 

-----> Fetching custom git buildpack... done 
-----> Ruby app detected 
-----> Compiling Ruby/Rails 
-----> Using Ruby version: ruby-1.9.3 
-----> Installing gsl 
-----> Installing dependencies using 1.5.2 
     Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 -- deployment 
     Fetching gem metadata from https://rubygems.org/........ 
     Fetching additional metadata from https://rubygems.org/.. 
     Using builder (3.0.4) 
     <...snip...> 
     Installing narray (0.6.0.8) 
     Installing gsl (1.15.3) 
     Your bundle is complete! 
     Gems in the groups development and test were not installed. 
     It was installed into ./vendor/bundle 
     Bundle completed (76.10s) 
     Cleaning up the bundler cache. 
-----> Writing config/database.yml to read from DATABASE_URL 
-----> Preparing app for Rails asset pipeline 
     Running: rake assets:precompile 
     Running: rake assets:precompile 
     Compiled jquery.js (2ms) (pid 1884) 
     <...snip...> 
     Asset precompilation completed (63.31s) 
-----> Discovering process types 
-----> Compressing... done, 87.4MB 
-----> Launching... done, v9 

Журнал Heroku показывает отсутствующий файл, libgsl.so.0

/app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.14/lib/active_support/dependencies.rb:251:in `require': libgsl.so.0: cannot open shared object file: No such file or directory - /app/vendor/bundle/ruby/1.9.1/gems/gsl-1.15.3/lib/rb_gsl.so (LoadError) 

Однако отсутствует файл существует в ~/vendor/gsl-1/lib:

~/vendor/gsl-1/lib $ ls -l 
total 23256 
-rw------- 1 u58334 58334 13351772 2012-09-18 02:29 libgsl.a 
-rw------- 1 u58334 58334 1781834 2012-09-18 02:26 libgslcblas.a 
-rwx------ 1 u58334 58334  954 2012-09-18 02:26 libgslcblas.la 
lrwxrwxrwx 1 u58334 58334  20 2014-04-03 17:34 libgslcblas.so -> libgslcblas.so.0.0.0 
lrwxrwxrwx 1 u58334 58334  20 2014-04-03 17:34 libgslcblas.so.0 -> libgslcblas.so.0.0.0 
-rwx------ 1 u58334 58334 1052844 2012-09-18 02:26 libgslcblas.so.0.0.0 
-rwx------ 1 u58334 58334  922 2012-09-18 02:29 libgsl.la 
lrwxrwxrwx 1 u58334 58334  16 2014-04-03 17:34 libgsl.so -> libgsl.so.0.16.0 
lrwxrwxrwx 1 u58334 58334  16 2014-04-03 17:34 libgsl.so.0 -> libgsl.so.0.16.0 
-rwx------ 1 u58334 58334 7603609 2012-09-18 02:29 libgsl.so.0.16.0 
drwx------ 2 u58334 58334  4096 2012-09-18 02:29 pkgconfig 

Я попытался heroku config:set PATH=/vendor/gsl-1/lib --app vp-staging, но тогда я получаю ошибку Error: No such file or directory от Heroku.

Я просмотрел документы Heroku и stackoverflow, но не могу определить, какая переменная среды должна быть настроена для направления Heroku в расположение библиотеки поставщика. Заранее спасибо за помощь этот пробел ...

EDIT

Также обратите внимание, что файл существует rb_gsl.so следующим образом:

~/vendor/bundle/ruby/1.9.1/gems/gsl-1.15.3/lib $ ls -l 
total 3968 
drwx------ 2 u13339 13339 4096 2014-04-03 18:00 gsl 
-rw------- 1 u13339 13339  59 2014-04-03 18:00 gsl.rb 
drwx------ 2 u13339 13339 4096 2014-04-03 18:00 ool 
-rw------- 1 u13339 13339  797 2014-04-03 18:00 ool.rb 
-rw------- 1 u13339 13339  59 2014-04-03 18:00 rbgsl.rb 
-rwx------ 1 u13339 13339 4039311 2014-04-03 18:01 rb_gsl.so 

Так кажется, что у меня есть как GSL драгоценный камень и двоичные библиотеки GSL правильно установлены, а компоновщик Heroku не может найти двоичный код ...

EDIT: Да, я все еще нахожусь здесь ... Вот новый i нформация.

Я нашел this потенциальный ответ и установить мой путь к библиотеке к местоположению файла libgsl.so.0 следующим образом:

$heroku config:add LD_LIBRARY_PATH=/app/vendor/gsl-1 

Нет Буэно. Тот же крах.

Тогда я заметил, что файл библиотеки «missing» также находится в каталоге /usr/lib32. Думая, что Heroku может не загружать lib32 (и просто загружать lib), я нашел отличный пост (видимо, у меня нет репутации, чтобы опубликовать ссылку) на разницу между путями autoload и eager_load, что привело к добавлению следующего eager_load_path к мой файл application.rb:

config.eager_load_paths += %W(#{config.root}/lib #{config.root}/lib32) 

Неплохо.

Я буду продолжать искать и ценить любую помощь.

EDIT

С некоторыми быстрой помощи от Heroku, получается, что я был очень близок к решению, которое должно было установить переменную конфигурации LD_LIBRARY_PATH=/app/vendor/gsl-1/lib я просто отсутствует каталог /lib. Иногда вы можете быть так близко, но пока. Надеюсь, этот ответ поможет кому-то в будущем ...

+0

Вашего ответ в нижнем редактировании работал для меня (установки переменной конфигурации). Вы должны представить это как ответ, поскольку я думаю, что люди могут пропустить это, скрытое в нижней части вопроса. – diasks2

+0

Спасибо diasks2 ... Я все еще достаточно новый для StackExchange, который я понял, что могу ответить на свои вопросы ... –

ответ

1

Ответ установить переменные конфигурации следующим образом:

LD_LIBRARY_PATH=/app/vendor/gsl-1/lib 
Смежные вопросы