Tôi chỉ dành phần tốt hơn của buổi sáng để làm việc thông qua cảnh báo này. Bản sửa lỗi này dành cho những người sử dụng Mac OS Lion. Cách khắc phục ở trên bằng cách sử dụng
bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
dành cho Snow Leopard với libxml2 được cài đặt qua MacPorts.
Với Lion, libxml2 được tải như một phần của quá trình bootstrap. Bất kể Nokogiri đang trỏ đến libxml2 nào, thư viện mặc định của hệ thống Lion cho libxml2 sẽ được sử dụng trong thời gian chạy. Lion sử dụng libxml2.2.7.3 được tìm thấy trong /usr
(not /usr/local
).
Như đã đề cập ở nhiều nơi khác, người ta có thể bỏ qua cảnh báo. Nếu, giống như tôi, cảnh báo khiến bạn phát điên, bạn có thể làm điều này:
bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
Thật thú vị, nếu bạn nhập nokogiri -v
vào dòng lệnh, bạn sẽ nhận được cảnh báo ngược lại:
WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8
Điều này cho thấy có nhiều điều hơn về cách libxml2 đang được tải, với Ruby và Rails sử dụng libxml2 được hệ thống tải và dòng lệnh sử dụng libxml2 từ đường dẫn môi trường. Dù sao, điều này im lặng lỗi cho tôi.
Tôi sẽ nói lại lần nữa - điều này chỉ dành cho Sư Tử. Bản sửa lỗi trước đó sẽ hoạt động đối với Snow Leopard.
Đây là phần cuối của câu trả lời. Dừng đọc ở đây.
OK, bạn đã không ngừng đọc ... tốt ...
KHÔNG ĐƯỢC KHUYẾN KHÍCH!!!!!!
Bạn đã được cảnh báo. Bạn có thể xác minh rằng Mac OSX đang tải thư viện libxml2 trong bootstrap của nó bằng cách tắt libxml2 có trong đó /usr/lib
. Làm điều gì đó như sao chép tất cả các phiên bản của libxml2*.dylib
sang libxml2*.dylib.old
(trên máy của tôi cái này là libxml2.2.7.3
, libxml2.2
và libxml2
).
Sau khi bạn thực hiện việc này, việc chạy Nokogiri sẽ không tạo ra bất kỳ lỗi nào. Đó là bởi vì nó không thể tìm thấy libxml2 đã tải và bây giờ sẽ đi theo đường dẫn môi trường, cuối cùng sẽ tìm thấy libxml2.2.7.8
trong /opt/local
.
NHƯNG bạn sẽ không thể sao chép lại các tệp libxml cũ. Điều này là do hệ điều hành cần libxml2 đã được tải trong bootstrap.
Tắt nguồn và bật lại nguồn sẽ làm máy của bạn bị hỏng. Màn hình đăng nhập sẽ bị treo và bị treo và bị treo. Tắt nguồn và bật lại nguồn ở chế độ một người dùng (giữ Command- Strong khi khởi động lại). Bạn có thể xem quá trình khởi động xảy ra. Thấp và này, nó ném ra một lỗi rằng nó không thể tải libxml2 và sau đó ngừng hoạt động.
Tắt nguồn và bật lại nguồn. Lần này khởi động vào chế độ khôi phục (giữ Command- Rhoặc giữ Optionrồi chọn đĩa khôi phục). Trong chế độ khôi phục, mở terminal ( utilities/terminal
). Gắn /usr/lib
trên HD của bạn (thử /Volumes/Macintosh\ HD/usr/lib
) và sao chép các tệp libxml2 trở lại. Khởi động lại và tất cả sẽ ổn.
brew remove --force libxml2
bundle config --delete build.nokogiri
gem uninstall nokogiri libxml-ruby
bundle