2014-08-27 87 views
0

我在我的一些項目中使用了libxml-rubylibxslt-ruby。在目標系統上,我使用debian 7.4版本中的ruby 1.9.3p194。 Bundler通過rubygems安裝。將libxslt與bundler和debian打包的ruby一起使用1.9.3

當我require "xslt"發生這種情況:

/var/lib/gems/1.9.1/gems/libxslt-ruby-1.1.1/lib/libxslt.rb:11:in `require': libxml_ruby.so: cannot open shared object file: No such file or directory - /var/lib/gems/1.9.1/gems/libxslt-ruby-1.1.1/lib/libxslt_ruby.so (LoadError) 
    from /var/lib/gems/1.9.1/gems/libxslt-ruby-1.1.1/lib/libxslt.rb:11:in `rescue in <top (required)>' 
    from /var/lib/gems/1.9.1/gems/libxslt-ruby-1.1.1/lib/libxslt.rb:7:in `<top (required)>' 
    from /var/lib/gems/1.9.1/gems/libxslt-ruby-1.1.1/lib/xslt.rb:11:in `require' 
    from /var/lib/gems/1.9.1/gems/libxslt-ruby-1.1.1/lib/xslt.rb:11:in `<top (required)>' 
    from test.rb:1:in `require' 
    from test.rb:1:in `<main>' 

test.rb

​​

的Gemfile中:

source "https://rubygems.org" 

gem "libxml-ruby" 
gem "libxslt-ruby" 

的命令是bundle exec ruby test.rbruby test.rb如寶石被安裝到系統目錄。

向bundler傳遞--path的行爲方式相同。

我已經設置了測試項目https://github.com/krissi/test-xslt-require。爲了便於複製,請使用(清潔)vagrantbox chef/debian-7.4,並按照這個命令:

sudo apt-get update 
sudo apt-get install git 
git clone https://github.com/krissi/test-xslt-require 
cd test-xslt-require 
sudo ./install.sh 
./run.sh 

作爲一種變通方法人們可以設置LD_LIBRARY_PATHlibxml-ruby/lib

LD_LIBRARY_PATH="/var/lib/gems/1.9.1/gems/libxml-ruby-2.7.0/lib" ./run.sh 

我失去了這個重要的東西?我想問問維護人員關於這個問題,但我真的不知道這可能是誰:debian,rubygems,ruby,libxml,libxslt?

長話短說:我很感謝您的任何幫助或提示。

由於提前, krissi


which ruby輸出:

/usr/bin/ruby 

gem env輸出:

RubyGems Environment: 
    - RUBYGEMS VERSION: 1.8.23 
    - RUBY VERSION: 1.9.3 (2012-04-20 patchlevel 194) [x86_64-linux] 
    - INSTALLATION DIRECTORY: /var/lib/gems/1.9.1 
    - RUBY EXECUTABLE: /usr/bin/ruby1.9.1 
    - EXECUTABLE DIRECTORY: /usr/local/bin 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - x86_64-linux 
    - GEM PATHS: 
    - /var/lib/gems/1.9.1 
    - /home/vagrant/.gem/ruby/1.9.1 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :benchmark => false 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - REMOTE SOURCES: 
    - http://rubygems.org/ 

gem list輸出:

*** LOCAL GEMS *** 

bundler (1.7.2) 
libxml-ruby (2.7.0) 
libxslt-ruby (1.1.1) 
+0

你可以發佈命令輸出命令是:** which ruby​​ ** and ** gem env | grep'RUBY EXECUTABLE'** – 2014-09-09 07:01:49

+0

還讓我們知道您使用的是哪個寶石版本。 – 2014-09-09 07:27:16

+0

添加了請求的信息 – krissi 2014-09-09 08:08:19

回答

0
  1. LD_LIBRARY_PATH:

它在的libxslt-ruby的問題結合。它們在構建它時綁定了libxml支持。因此,相對路徑綁定不起作用。

  • --path:上指定path.Its沒什麼
  • 它設置軟件包安裝做動態鏈接庫。

  • 要使用此 「的libxslt-紅寶石」 你必須做以下步驟工作:

    ldd test-xslt-require-master/bundle/ruby/1.9.1/extensions/x86_64-linux/1.9.1/libxslt-ruby-1.1.1/libxslt_ruby.so 
    
  • 以上命令的輸出是如下:

    linux-vdso.so.1 => (0x00007fff7542a000) 
        libruby-1.9.1.so.1.9 => /usr/lib/libruby-1.9.1.so.1.9 (0x00007f23b5e58000) 
        ***libxml_ruby.so => not found*** 
        libexslt.so.0 => /usr/lib/x86_64-linux-gnu/libexslt.so.0 (0x00007f23b5c42000) 
        libxslt.so.1 => /usr/lib/x86_64-linux-gnu/libxslt.so.1 (0x00007f23b5a05000) 
        libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f23b569f000) 
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f23b52d8000) 
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f23b50ba000) 
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f23b4eb2000) 
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f23b4cad000) 
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f23b4a74000) 
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f23b476e000) 
        /lib64/ld-linux-x86-64.so.2 (0x00007f23b6496000) 
        libgcrypt.so.11 => /lib/x86_64-linux-gnu/libgcrypt.so.11 (0x00007f23b44ee000) 
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f23b42d5000) 
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f23b40b3000) 
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f23b3ead000) 
    

    您可以檢查輸出「libxml_ruby.so」未找到。

  • 鏈路使用符號鏈接的庫:

    ln -s /home/rajesh/ruby/test-xslt-require-master/bundle/ruby/1.9.1/extensions/x86_64-linux/1.9.1/libxml-ruby-2.7.0/libxml_ruby.so /usr/lib/x86_64-linux-gnu/ 
    
  • 運行命令再次使用點編號3.它會告訴你的庫連接到模塊的libxslt。

  • 添加下面的代碼在你的test.rb

    require 'rubygems' 
        require 'bundler/setup' 
        require 'xslt' 
        puts "passed" 
    
  • RubyGems的 & 捆紮機/設置將解決動態鏈接庫(LD_LIBRARY_PATH)。

  • 嘗試實施Nokogiri模塊。
  • check this link僅供參考。

    +0

    感謝您對情況的澄清。安裝完成後(使用gem/bundler,不是你的手動方式),這個庫駐留在'/ var/lib/gems/1.9.1/gems/libxml-ruby-2.7.0/lib'中,我在上面的工作表中描述過。 bundler的'--path'選項在這種情況下也沒有幫助,因爲它不會生成包含所有'.so'文件的單個目錄。問題是誰負責設置LD_LIBRARY_PATH或類似的(在這種情況下顯然不會自動完成) – krissi 2014-09-09 13:04:19