Przeprowadziłem różne badania i próbowałem wielu różnych rzeczy. Wiem, że na to pytanie odpowiadano wiele razy, ale żadne z sugerowanych rozwiązań nie działa.
Po uaktualnieniu do Lion otrzymuję błędy segmentacji w Rubim. Jestem prawie pewien, że to Nokogiri. Więc zainstalowałem libxml2 przez Homebrew. Pobiegłem brew link libxml2
. Następnie ponownie zainstalowałem Nokogiri przy użyciu tej wersji biblioteki.
Na dowód:
$ nokogiri -v
# Nokogiri (1.5.0)
---
warnings: []
nokogiri: 1.5.0
ruby:
version: 1.9.2
platform: x86_64-darwin11.0.0
description: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
engine: ruby
libxml:
binding: extension
compiled: 2.7.8
loaded: 2.7.8
Umieściłem już Nokogiri na początku mojego pliku gemfile i wymagałem tego również w moim pliku środowiska. Nie mam pojęcia, dlaczego wciąż otrzymuję to ostrzeżenie.
Jakieś sugestie lub pomysły, aby upewnić się, że ładuje właściwą wersję libxml2?
brew remove --force libxml2
bundle config --delete build.nokogiri
gem uninstall nokogiri libxml-ruby
bundle
1.6.2.1
iUbuntu 12.04
nie graj miło. Wracam do1.6.1
naprawy po wypróbowaniu każdej innej poprawki, jaką udało mi się znaleźć.Odpowiedzi:
Właśnie spędziłem większą część poranka, pracując nad tym ostrzeżeniem. Ta poprawka jest przeznaczona dla osób korzystających z systemu Mac OS Lion. Poprawka powyżej przy użyciu
bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
jest dla systemu Snow Leopard z biblioteką libxml2 zainstalowaną przez MacPorts.
W przypadku Lion, libxml2 jest ładowane jako część procesu ładowania początkowego. Niezależnie od tego, na którą bibliotekę libxml2 Nokogiri wskazuje, domyślna biblioteka systemu Lion dla libxml2 będzie używana w czasie wykonywania. Lion używa biblioteki libxml2.2.7.3 znajdującej się w
/usr
(nie/usr/local
).Jak wspomniano w wielu innych miejscach, można po prostu zignorować ostrzeżenie. Jeśli tak jak ja ostrzeżenie doprowadza Cię do szaleństwa, możesz to zrobić:
Co ciekawe, jeśli wpiszesz
nokogiri -v
w wierszu poleceń, otrzymasz odwrotne ostrzeżenie:WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8
Sugeruje to, że ładowanie libxml2 wiąże się nie tylko z tym, że Ruby i Rails używają załadowanej przez system biblioteki libxml2, a linia poleceń używa libxml2 ze ścieżki środowiska. W każdym razie to ucisza błąd.
Powtórzę - to tylko dla Lwa. Poprzednia poprawka będzie działać w systemie Snow Leopard.
To już koniec odpowiedzi. Przestań czytać tutaj.
OK, nie przestawałeś czytać ... cóż ...
NIEPOLECANE!!!!!!
Zostałeś ostrzeżony. Możesz sprawdzić, czy Mac OSX ładuje bibliotekę libxml2 w swoim bootstrapie, wyłączając libxml2 znajdujący się w
/usr/lib
. Czy coś takiego kopiując wszystkie wersjelibxml2*.dylib
dolibxml2*.dylib.old
(na moim komputerze to byłolibxml2.2.7.3
,libxml2.2
ilibxml2
).Po wykonaniu tej czynności uruchomienie Nokogiri nie spowoduje żadnych błędów. Dzieje się tak, ponieważ nie może znaleźć załadowanego libxml2 i będzie teraz podążać ścieżką środowiska, ostatecznie znajdując
libxml2.2.7.8
w/opt/local
.ALE nie będziesz w stanie skopiować starych plików libxml z powrotem. Dzieje się tak, ponieważ system operacyjny potrzebuje biblioteki libxml2, która została załadowana w bootstrapie.
Wyłączenie i ponowne włączenie spowoduje uszkodzenie maszyny. Ekran logowania zawiesza się, zawiesza i zawiesza. Wyłącz i włącz ponownie w trybie pojedynczego użytkownika (przytrzymaj Command- Spodczas ponownego uruchamiania). Możesz obserwować, jak następuje bootstrap. Niska i oto zgłasza błąd, że nie może załadować libxml2, a następnie przestaje działać.
Wyłącz i włącz ponownie. Ten czas uruchamiania w trybie awaryjnym (albo zawieszone Command- Rlub zawieszone Option, a następnie wybierz dysk odzyskiwania). W trybie odzyskiwania otwórz terminal (
utilities/terminal
). Zamontuj/usr/lib
na dysku HD (spróbuj/Volumes/Macintosh\ HD/usr/lib
) i skopiuj z powrotem pliki libxml2. Uruchom ponownie i wszystko będzie dobrze.źródło
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2/
~
, wydaje się, że ustawia tę wartość globalnie. Więc może możesz to zrobić tylko raz i nigdy więcej nie będziesz musiał się tym martwić.Jeśli zainstalowałeś Nokogiri z
gem install nokogiri
, możesz rozwiązać to ostrzeżenie, uruchamiającgem pristine nokogiri
rekompilację rozszerzenia C klejnotu.Jeśli zainstalowałeś Nokogiri z
bundle install
, możesz rozwiązać to ostrzeżenie, uruchamiającbundle exec gem pristine nokogiri
rekompilację rozszerzenia C klejnotu wszędzie tam, gdzie zainstalował go Bundler.źródło
bundle exec gem pristine nokogiri
przybił to.Do tego jeśli używasz homebrew i Bundler naprawić, dodać
gem 'nokogiri'
do góry waszegoGemfile
, a następnie uruchomić następujące polecenia:gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 --with-xml2-config brew install libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ bundle install
Jeśli nie używasz pakietu, uruchom zamiast tego następujące polecenia:
gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 --with-xml2-config brew install libxslt gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
W swojej aplikacji powinieneś najpierw wymagać nokogiri , aby zmusić aplikację do załadowania biblioteki dynamicznej libxml2 zamiast starszej wersji systemowej libxml2 załadowanej przez gems, która nie określiła, którą bibliotekę załadować.
źródło
link
i nieunlink
są potrzebne. Udało mi się uciec bez ich używania.gem
poleceń przedbundle exec
- na przykład, jeśli używaszrbenv
.brew uninstall libxslt
?Nic z tego nie działało dla mnie.
Zainstalowałem libxml2 w późniejszej wersji (2.7.8) z brew. To spowodowało, że nokogiri kompilowało się przeciwko niemu i późniejszym problemom. Rozwiązanie, usuń je, następnie zbuduj, a następnie zainstaluj, jeśli chcesz.
Oto, co zadziałało:
brew uninstall libxml2
(jeśli wcześniej zainstalowano)gem uninstall nokogiri
gem install nokogiri
brew install libxml2
(opcjonalny)źródło
brew uninstall libxml2
wcześniej tak było. dzięki!bundle install
w RubyMine. Możesz zobaczyć ten sam błąd w wierszu poleceń, jeśli wpiszeszrake --tasks
Rozwiązanie (dla mnie) po aktualizacji do Mountain Lion było znacznie prostsze:
gem uninstall nokogiri # (and ignore the warnings about dependencies) gem install nokogiri
źródło
Zgodnie z komentarzem patrickmcgraw powyżej, po prostu umieszczenie nokogiri jako pierwszego wpisu w moim pliku Gemfile zadziałało dla mnie. Umieszczam to jako osobną odpowiedź, ponieważ oryginalny komentarz został ukryty.
source 'http://rubygems.org' gem 'nokogiri' gem 'rails', '3.0.20' etc...
źródło
Program Bundler ma opcje ustawienia domyślnych lokalizacji kompilacji. Na przykład z libxml2 zainstalowanym przez macports:
$ bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
Po wykonaniu tej czynności
bundle install
ostrzeżenie zniknęło.Jest też kilka pomocnych przykładów ustawiania opcji budowania na wiki nokogiri .
źródło
Wygląda na to, że po zainstalowaniu klejnotu zaktualizowałeś swoje biblioteki systemowe, więc musisz zaktualizować Nokogiri. Aby użyć aktualnej wersji lib:
źródło
Miałem podobny problem i właśnie rozwiązałem w ten sposób:
W moim przypadku mam zainstalowany RVM i miałem zestawy klejnotów @global i @project. Obaj mieli zainstalowanego nokogiri, a jeden z nich zbudował z innym libxml.
Odbudowanie ich obu (mam powody, by to zrobić) rozwiązało problem.
Mam nadzieję że to pomoże..
źródło
gem uninstall nokogiri bundle #install nokogiri again
Jeśli to się nie powiedzie, pojawi się komunikat „Brak libxml2”. i widzisz gems / nokogiri-1.5.0 / ext / nokogiri / mkmf.log próbujące użyć "/usr/bin/gcc-4.2 ...", to brakuje /usr/bin/gcc-4.2
Rozwiązanie:
sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
Przed:
$ ll /usr/bin/gcc* lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
Po:
$ ll /usr/bin/gcc* lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2 lrwxr-xr-x 1 root wheel 12 Jan 15 21:07 /usr/bin/gcc-4.2 -> /usr/bin/gcc
Jeśli naprawdę brakuje Ci libxml2 libxslt, to
brew update brew install libxml2 libxslt brew link libxml2 libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib/ --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ bundle
FYI: Prowadzę Mountain Lion z naparem i bundlerem.
źródło
gem install libxml-ruby pomaga mi
źródło
Właściwie miałem zainstalowane 2 wersje libxml, jedną ze źródła, jedną z RPM.
Oto moje kompletne rozwiązanie
Odinstalowałem źródło (z katalogu źródłowego)
Usuń pakiety
rm -rf ~/.bundle ~/.bundler
Zaktualizowany LD (może być konieczne zrobienie tego jako root, nie sudo)
Następnie ponownie zainstalowałem pakiet
źródło
Właśnie wpadłem na to sam (OS X Lion 10.7.5). Moja dokładna wiadomość brzmiała: Nokogiri zostało zbudowane w oparciu o LibXML w wersji 2.8.0, ale ma dynamicznie załadowane 2.7.3
Wypróbowałem kilka wymienionych tutaj sugestii, żadna nie działała, ale to zadziałało:
gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
Wyjaśnienie jest następujące: „Dzieje się tak, ponieważ używana jest domyślna libxml2 systemu Lion (ładowana podczas ładowania początkowego), niezależnie od tego, dla którego libxml2 Nokogiri zostało zbudowane”
Kredyty na: https://coderwall.com/p/o5ewia
źródło
System operacyjny: Maverick 10.9.3
Ruby 1.9.3
OSTRZEŻENIE: Nokogiri zostało zbudowane w oparciu o LibXML w wersji 2.9.1, ale ma dynamiczne ładowanie 2.9.0
Moje rozwiązanie:
gem uninstall nokogiri brew update cd /usr/local brew versions libxml2 git checkout 5dd45d7 /usr/local/Library/Formula/libxml2.rb # libxml version 2.9.0 brew install libxml2 bundle install or gem install nokogiri -v "1.5.11"
Mam nadzieję, że to pomoże
źródło
Jeśli masz tę wiadomość, a Twoje nokogiri jest nieaktualne w stosunku do wersji dostępnej ze źródła gem, po prostu uruchom,
bundle update nokogiri
aby pobrać nowy kod i ponownie skompilować. Twój błąd powinien zniknąć.źródło
System operacyjny: Catalina
Ostrzeżenie: ostrzeżenie nokogiri zostało zbudowane przeciwko libxml w wersji 2.9.10, ale zostało dynamicznie załadowane 2.9.4
Śledziłem Michiel de Mare kroki , ale napar zainstalować libxml2 --with-xml2-config nie powiodło się z nieprawidłowym błędu opcji. Więc zainstalowałem libxml2 i libxslt i zanotowałem dane wyjściowe obu poleceń.
brew install libxml2 ==> Downloading https://homebrew.bintray.com/bottles/libxml2-2.9.10_2.catalina.bottle.tar.gz Already downloaded: /Users/alberto/Library/Caches/Homebrew/downloads/9ddf5cb90fd16a7eb531e37bb748fd392f30214d9fe1568b2b70d28cc368c8f7--libxml2-2.9.10_2.catalina.bottle.tar.gz ==> Pouring libxml2-2.9.10_2.catalina.bottle.tar.gz ==> Caveats libxml2 is keg-only, which means it was not symlinked into /usr/local, because macOS already provides this software and installing another version in parallel can cause all kinds of trouble. If you need to have libxml2 first in your PATH run: echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc For compilers to find libxml2 you may need to set: export LDFLAGS="-L/usr/local/opt/libxml2/lib" export CPPFLAGS="-I/usr/local/opt/libxml2/include" For pkg-config to find libxml2 you may need to set: export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig" ==> Summary 🍺 /usr/local/Cellar/libxml2/2.9.10_2: 280 files, 10.6MB
brew install libxslt ==> Downloading https://homebrew.bintray.com/bottles/libxslt-1.1.34.catalina.bottle.tar.gz ==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/cbadecf3186f45754220dff4cbdfbb576882a211d615b52249a4c9d8ba4d7c3a?response-content-disposition=attachment%3Bfil ######################################################################## 100.0% ==> Pouring libxslt-1.1.34.catalina.bottle.tar.gz ==> Caveats To allow the nokogiri gem to link against this libxslt run: gem install nokogiri -- --with-xslt-dir=/usr/local/opt/libxslt libxslt is keg-only, which means it was not symlinked into /usr/local, because macOS already provides this software and installing another version in parallel can cause all kinds of trouble. If you need to have libxslt first in your PATH run: echo 'export PATH="/usr/local/opt/libxslt/bin:$PATH"' >> ~/.zshrc For compilers to find libxslt you may need to set: export LDFLAGS="-L/usr/local/opt/libxslt/lib" export CPPFLAGS="-I/usr/local/opt/libxslt/include" For pkg-config to find libxslt you may need to set: export PKG_CONFIG_PATH="/usr/local/opt/libxslt/lib/pkgconfig" ==> Summary 🍺 /usr/local/Cellar/libxslt/1.1.34: 136 files, 2.8MB
I użyłem tych katalogów podczas konfigurowania pakietu dla nokogiri
bundle config build.nokogiri --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-xslt-dir=/usr/local/opt/libxslt
Podsumowując, wykonałem te kroki
gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 brew install libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-xslt-dir=/usr/local/opt/libxslt bundle install
źródło