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ć:
bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
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 wersje libxml2*.dylib
do libxml2*.dylib.old
(na moim komputerze to było libxml2.2.7.3
, libxml2.2
i libxml2
).
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.
brew remove --force libxml2
bundle config --delete build.nokogiri
gem uninstall nokogiri libxml-ruby
bundle