2011-01-28 8 views
10

Rails 3'te, çerçeveyi her çağırdığımda olsun, rake, rails server veya başka bir şey olsun, aşağıdakileri fark ettim uyarı: Nokogiri, LibXML sürüm 2.7.7'ye karşı oluşturuldu, ancak dinamik olarak yüklü 2.7.3

Nokogiri was built against LibXML version 2.7.7, but has dynamically loaded 2.7.3 

Google'da aranıyor açık lib kullanarak Nokogiri yeniden önermek ve yolları, her biri birkaç blog yayınlarını, verir. Örneğin: Benim için sorunu çözmek vermedi

http://mrflip.github.com/2009-08/nokogiri-hates-libxml2-on-osx.html

Ama.

nokogiri -v yazarak bana verir bu:

benim yapı Tamam gitti önermek görünüyor ve Nokogiri doğru kütüphane sürümlerini yükleniyor
--- 
warnings: [] 

ruby: 
    engine: mri 
    version: 1.8.7 
    platform: i686-darwin10.4.0 
libxml: 
    loaded: 2.7.7 
    binding: extension 
    compiled: 2.7.7 
nokogiri: 1.4.4 

. Peki neden Rails şikayet ediyor?

Aslında cevabı buldum ve burada paylaşacağımı düşündüm. Cevabımı aşağıya bakın.

cevap

14

Sorun, diğer kitaplıkların önceki libxml sürümünü yüklemesidir. Gemfile'ımda bazı şeyleri yorumlayarak buldum. Özellikle, benim durumumda RMagick libxml 2.7.3 yükleniyordu. (Bu SVG dosyalarını okumak için libxml kullanır.)

ben şöyle libxml 2.7.7 karşı RMagick yeniden çalıştı:

gem install --no-rdoc --no-ri rmagick -- --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-include=/opt/local/libxslt --with-xslt-lib=/opt/local/lib 

Ancak RMagick bu bayraklar umurumda değildi. Yine 2.7.3 kullanılarak inşa edilmiştir. (Herhangi bir kişi, belirli bir libxml sürümüne karşı RMagick'in nasıl oluşturulacağını bilirse, lütfen bilginizi paylaşın.)

Sonuç olarak, yarı yolda iyi bir çözüm buldum. Bu iki mücevher arasındaki sürüm çatışmasını çözemezsem, en azından libxml'in daha yeni bir sürümünü kullanan Nokogiri'yi tercih ederim. Bunu yapmak için Gemfile'ımdaki hangi taşların Nokogiri'yi kullandığını ve ilk olarak yerleştirdiğimi anladım. Bir keresinde bu vardı oysa

Yani,:

gem 'sanitize' # Has Nokogiri as dependency 
gem 'rmagick', :require => 'RMagick' 

Şimdi uyarı gitti ve RMagick henüz şikayet değil:

gem 'rmagick', :require => 'RMagick' 
gem 'sanitize' # Has Nokogiri as dependency 

şimdi bu var. Feragatname: Uygulamalarımda SVG kullanmıyorum, bu yüzden RMagick'in libxml 2.7.7 ile tam uyumlu olduğunu doğrulamamıştım.

+0

Teşekkürler! RMagick'in libxml yüklediği hakkında hiçbir fikrim yoktu. –

+0

Benden de teşekkürler! Bu tekrarlanan recompilations başarısız sonra benim için sorunu çözdü. – adriandz

+0

Teşekkürler ~ Ben farklı bir gem ile aynı sorunu vardı. Gemfile'ımdaki her şeyi yorumlayıp her seferinde bir tane geri yüklemek önemliydi. Benim durumumda, hitimes mücevher suçlandı. – Levi

6

Ayrıca, uygulamanızın ilk satırında, Bundle.require'den önce require 'nokogiri' da olabilir - o zaman diğer bağımlılıkların ne olduğunu bulmak zorunda değilsiniz.