[英]How to fix `require': cannot load such file — nokogiri/2.1/nokogiri (LoadError)
[英]'require': cannot load such file -- 'nokogiri\nokogiri' (LoadError) when running `rails server`
我正在使用 DevKit 在 Windows 8.1 上運行全新安裝的 Ruby 2.2.1。 安裝后我運行:
gem install rails
rails new testapp
cd testapp
rails server
將其他一切保留為默認值。
當我收到錯誤消息而不是運行服務器時,該過程在最后一行失敗
in 'require': cannot load such file -- 'nokogiri\nokogiri' (LoadError)
它每次都會發生,我環顧四周並嘗試了我發現的所有方法來修復它,但到目前為止沒有任何效果。
這里有什么問題,我如何讓一個簡單的測試 Rails 應用程序工作?
Nokogiri 還不支持 Windows 上的 Ruby 2.2。 下一個版本會。 見https://github.com/sparklemotion/nokogiri/issues/1256
Nokogiri 不支持 Windows 上的本機構建(例如使用 devkit)。 相反,它提供包含預構建 DLL 的 gem。
您可能想加入或觀看有關 devkit 構建支持主題的討論: https : //github.com/sparklemotion/nokogiri/issues/1190
首先,卸載您當前使用的 Nokogiri 版本:
gem uninstall nokogiri
使用以下方法在本地安裝此版本:
gem install --local C:\\Users\\$user$\\Downloads\\nokogiri-1.6.6.2-x64-mingw32.gem
或者,如果您運行的是 32 位 Ruby:
gem install --local C:\\Users\\$user$\\Downloads\\nokogiri-1.6.6.2-x86-mingw32.gem
路徑可能會有所不同,具體取決於您將文件下載到的位置。
嘗試使用ruby bin\\rails server
server 再次啟動ruby bin\\rails server
,它應該可以工作。
我讓 Nokogiri 在 Windows 10 上使用 Ruby 2.2 運行,混合了 Mike Dalessios 和 Julios 的回答:
gem uninstall nokogiri
。gem "nokogiri", ">= 1.6.7.rc"
到您的 Gemfile 中。bundle install
。bundle update nokogiri
。ruby_dir\\lib\\ruby\\gems\\2.2.0\\gems\\nokogiri-1.6.6.2\\ext\\nokogiri
extconf.rb
dir_config('iconv').any? or pkg_config('libiconv')
dir_config('iconv').any? or pkg_config('libiconv')
到#376
MinGW64
和MSYS
文件夾PATH
(刪除Devkit
路徑引用 - 它不起作用)libxml2
、 libxslt
、 iconv
庫(或此處)ruby extconf.rb --platform=ruby --n --use-system-libraries
引用下載的庫make
make install
捆綁安裝
第一步是捆綁.
這會將nokogiri
gem 放在您的機器上,而無需運行預打包的編譯器(這在 Windows 中通常不起作用)。
這將顯示 Nokogiri 已安裝:
瀏覽
瀏覽到nokogiri
文件夾,找到ext/nokogiri/extconf.rb
:
打開extconf.rb
...並添加dir_config('iconv').any? or pkg_config('libiconv')
dir_config('iconv').any? or pkg_config('libiconv')
到#376
標准的 Nokogiri 安裝“依賴於”包含iconv
的libxml2
- 我們需要明確定義它,否則將會出現iconv.h is missing
錯誤。
添加工具鏈
不要為此使用devkit
- 它不起作用。
你需要MinGW
:
我已經在 Mega 上壓縮了我的確切MinGW64
和MSYS64
文件夾(密鑰: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA
):
添加到路徑
這可以訪問gcc
和make
(兩者都需要):
從您的路徑中刪除devkit
ref,並添加以下內容:
- MINGW64_PATH/bin
- MSYS64_PATH/bin
下載庫
我已將庫添加到 Mega:
您將在此處解壓縮它們:
所有的庫都來自這個來源。
運行extconf.rb
一旦庫在您的系統上,您可以運行ruby extconf.rb
來配置構建:
32位
ruby extconf.rb --platform=ruby -N -- --use-system-libraries --with-xml2-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxml2-2.9.2-win32-x86 --with-xml2-include=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxml2-2.9.2-win32-x86/include/libxml2 --with-iconv-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/iconv-1.14-win32-x86 --with-xslt-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxslt-1.1.28-win32-x86
64位
#64 ruby extconf.rb --platform=ruby -N -- --use-system-libraries --with-xml2-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxml2-2.9.2-win32-x86_64 --with-xml2-include=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxml2-2.9.2-win32-x86_64/include/libxml2 --with-iconv-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/iconv-1.14-win32-x86_64 --with-xslt-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxslt-1.1.28-win32-x86_64
make
這可能會產生錯誤/警告,只要它說“ Error 1 (ignored)
”,就應該沒問題。
之后,使用make install
:
然后瀏覽到您的 Rails 安裝並運行rails s
:
給出上下文:
Windows 上的 Ruby 2.2+ 不編譯 Nokogiri 所需的擴展。
gem 的擴展是它使用的額外依賴項(庫)。
它們是在您安裝gem 時構建的:
缺乏擴展阻止了 Nokogiri 運行。
擴展存在於 gem 的ext
文件夾中(你可以在這里閱讀它們):
Mysql2
、 RMagick
、 PGSQL
、 Nokogiri
等都使用擴展/庫。
這就是為什么 - 在 Windows 上 - 您必須在安裝 gem 時使用自定義開關( --with-opt-dir
)。 這為 Ruby / shell / ( cmd
) 提供了構建 gem 文件所需的lib
/ include
目錄(這與PATH
工作方式等效)。
在Linux
/ Mac
,這些目錄由各自的包管理器 ( brew
/ apt-get
) 管理。 Windows 沒有這個,所以你必須手動安裝擴展。
因為 Windows 沒有一套標准的庫,你必須自己下載它們。 您還必須自己構建它們(這很棘手)。
Nokogiri 安裝的修復是使用正確的庫和構建工具來安裝 gem。
建造
與 Ruby 2.2+ 的不同之處在於 gem 將“安裝”而不顯示任何異常。 你認為它已經安裝了,卻發現 Rails沒有加載(因此出現nokogiri/nokogiri.so
錯誤)。
這意味着您必須確保系統上有這些文件,並運行編譯器來安裝它們。
上面的文檔應該向您展示如何做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.