2013-04-05 7 views
6

Ho cercato di far installare Nokogiri sul mio computer (Mountain Lion) da usare con rspec e capybara, ma per la vita di me, non riesco a farlo funzionare propriamente.Ottenere nokogiri per usare una versione più recente di libxml2

Da quello che posso dire, il problema è con nokogiri che utilizza la versione sbagliata di libxml2. Ho provato a disinstallare e reinstallare libxml2 usando Homebrew (assicurandomi che sia il più recente), disinstallando e reinstallando nokogiri usando bundle, e specificando il percorso esatto dei file libxml2 che Homebrew ha installato durante l'installazione della gemma nokogiri. Le mie istruzioni di installazione più recenti sono state simili a

sudo gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.0/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28 

dove tutte queste posizioni corrispondono correttamente alle posizioni in cui sono installati gli strumenti. Tuttavia, dopo l'esecuzione bundle exec rspec spec/requests/static_pages.rb, ho ancora ottenere questo output:

/Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/nokogiri-1.5.9/lib/nokogiri.rb:28:in `require': dlopen(/Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/nokogiri-1.5.9/lib/nokogiri/nokogiri.bundle, 9): Library not loaded: /usr/local/lib/libxml2.2.dylib (LoadError) 
Referenced from: /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/nokogiri-1.5.9/lib/nokogiri/nokogiri.bundle 
Reason: Incompatible library version: nokogiri.bundle requires version 12.0.0 or later, but libxml2.2.dylib provides version 10.0.0 - /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/nokogiri-1.5.9/lib/nokogiri/nokogiri.bundle 
    from /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/nokogiri-1.5.9/lib/nokogiri.rb:28:in `<top (required)>' 
    from /Users/alex/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `require' 
    from /Users/alex/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `block (2 levels) in require' 
    from /Users/alex/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `each' 
    from /Users/alex/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `block in require' 
    from /Users/alex/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `each' 
    from /Users/alex/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `require' 
    from /Users/alex/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler.rb:132:in `require' 
    from /Users/alex/Sites/harbingernews/config/application.rb:7:in `<top (required)>' 
    from /Users/alex/Sites/harbingernews/config/environment.rb:2:in `require' 
    from /Users/alex/Sites/harbingernews/config/environment.rb:2:in `<top (required)>' 
    from /Users/alex/Sites/harbingernews/spec/spec_helper.rb:3:in `require' 
    from /Users/alex/Sites/harbingernews/spec/spec_helper.rb:3:in `<top (required)>' 
    from /Users/alex/Sites/harbingernews/spec/requests/static_pages_spec.rb:1:in `require' 
    from /Users/alex/Sites/harbingernews/spec/requests/static_pages_spec.rb:1:in `<top (required)>' 
    from /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/rspec-core-2.9.0/lib/rspec/core/configuration.rb:746:in `load' 
    from /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/rspec-core-2.9.0/lib/rspec/core/configuration.rb:746:in `block in load_spec_files' 
    from /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/rspec-core-2.9.0/lib/rspec/core/configuration.rb:746:in `map' 
    from /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/rspec-core-2.9.0/lib/rspec/core/configuration.rb:746:in `load_spec_files' 
    from /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/rspec-core-2.9.0/lib/rspec/core/command_line.rb:22:in `run' 
    from /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/rspec-core-2.9.0/lib/rspec/core/runner.rb:69:in `run' 
    from /Users/alex/.rvm/gems/ruby-1.9.3-p286/gems/rspec-core-2.9.0/lib/rspec/core/runner.rb:10:in `block in autorun' 

Ho provato tutti i passaggi che ho trovato on-line (la maggior parte edificio di riferimento e caricare diverse versioni di libxml2, come this one, ma non ho avuto Il mio Gemfile e Gemfile.lock possono essere trovati here. Se qualcuno mi può aiutare, lo apprezzerei molto.Non ho potuto trovare altri casi online con questo problema

+0

Qual è l'output di 'brew --prefix libxml2'? Vedi il file extconf.rb in nokogiri/ext/nokogiri/per indizi su dove Nokogiri sta cercando libs e file header. –

+0

Ecco l'output: /usr/local/opt/libxml2 Ho trovato il file a cui ti riferivi e penso di capire cosa significa tutto, anche se sono davvero insicuro. Devo aggiungere i percorsi da Homebrew all'elenco delle posizioni da controllare? Se lo faccio, smetteremo di usare la vecchia versione errata di libxml2? – alexlafroscia

+1

Hai letto _ [Cosa fare se libxml2 è un idiota] (https://github.com/sparklemotion/nokogiri/wiki/What-to-if-libxml2-is-being-a-jerk) _ ? – Phrogz

risposta

4

Solo per chiarire, il commento di Phrogz mi ha aiutato molto, ho seguito le istruzioni a cui si collegava, la pagina What to do if libxml2 is being a jerk? sulla pagina Github di Nokogiri. p usando Macports invece di Homebrew, e non sono sicuro se questo è ciò che ha fatto la differenza (avevo già provato molti di questi passaggi) ma in un modo o nell'altro, sembra che stia funzionando bene ora.

+3

Bene, mi piacerebbe vedere una soluzione Homebrew. – fatuhoku

9

In Mavericks, installare le librerie con brew e impostare NOKOGIRI_USE_SYSTEM_LIBRARIES=1 prima di installare la gemma ha fatto il trucco per me.

Riassumendo:

  • Se precedentemente installato, disinstallare la gemma:
    $ gem uninstall nokogiri

  • Usa Homebrew installare libxml2, libxslt e libiconv:
    $ brew install libxml2 libxslt libiconv

  • Installare la gemma specificando il pa THS alle librerie da collegare contro:
    $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"

1

Googled questa domanda dopo l'aggiornamento OsX quando ho avuto problema:

require': dlopen(/Users/tomi/.rvm/gems/[email protected]/extensions/x86_64-darwin-12/2.1.0-static/nokogiri-1.5.10/nokogiri/nokogiri.bundle, 9): Library not loaded: /usr/local/opt/libxml2/lib/libxml2.2.dylib (LoadError)

e questo ha funzionato per me

brew uninstall libxml2 libxslt libiconv brew install libxml2 libxslt libiconv

+0

Output quando si esegue il comando 'install' su OS X Mavericks: ' '' Errore: nessuna formula disponibile per libiconv Apple distribuisce libiconv con OS X, lo si può trovare in/usr/lib. Alcuni script di compilazione non riescono a individuarlo correttamente, si prega di controllare le formule esistenti per le soluzioni. '' – Webdevotion

8

Questo mi aiuta ad aggiornare l ibxml e installa nokogiri correttamente ...

  1. gemma di disinstallazione nokogiri libxml-rubino
  2. aggiornamento birra
  3. birra disinstallazione libxml2
  4. birra install libxml2 --with-xml2-config
  5. birra collegamento --force libxml2
  6. birra installare libxslt
  7. brew link --force libxslt
  8. bundle config build.nokogiri - --with-xml2- dir =/usr --with-XSLT-dir =/opt/local --with-iconv-dir =/opt/local
  9. bundle install

Ecco la fonte: http://www.kormoc.com/2013/12/22/nokogiri-libxml2/

Spero che questo aiuti qualcuno ...

+0

Ha funzionato per me :) Grazie –

+0

Non ha funzionato per me su OS X 10.10.5 sfortunatamente :(Ancora lamentarsi di libxml2. –

Problemi correlati