簡體   English   中英

'require': 無法加載此類文件 -- 運行 `rails server` 時出現 'nokogiri\\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

  1. 首先,卸載您當前使用的 Nokogiri 版本:

     gem uninstall nokogiri
  2. 下載Nokogiri 1.6.6.2 (x64)Nokogiri 1.6.6.2 (x86)

  3. 使用以下方法在本地安裝此版本:

     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 的回答:

  1. Nokogiri 的 github repo 中查找最新版本的 Nokogiri。
  2. 運行gem uninstall nokogiri
  3. gem "nokogiri", ">= 1.6.7.rc"到您的 Gemfile 中。
  4. 運行bundle install
  5. 如果 bundle 在某個版本中鎖定了 Nokogiri,則運行bundle update nokogiri

在此處輸入圖片說明

使固定

  1. 捆綁安裝(獲取 Nokogiri 文件)
  2. 瀏覽到ruby_dir\\lib\\ruby\\gems\\2.2.0\\gems\\nokogiri-1.6.6.2\\ext\\nokogiri
  3. 打開extconf.rb
  4. 添加dir_config('iconv').any? or pkg_config('libiconv') dir_config('iconv').any? or pkg_config('libiconv')#376
  5. 從 Mega 下載MinGW64MSYS文件夾
  6. 將它們添加到 Windows 中的PATH (刪除Devkit路徑引用 - 它不起作用)
  7. 下載libxml2libxslticonv(或此處
  8. 運行ruby extconf.rb --platform=ruby --n --use-system-libraries引用下載的庫
  9. 運行make
  10. 運行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 安裝“依賴於”包含iconvlibxml2 - 我們需要明確定義它,否則將會出現iconv.h is missing錯誤。

添加工具鏈

不要為此使用devkit - 它不起作用。

你需要MinGW

在此處輸入圖片說明

我已經在 Mega 上壓縮了我的確切MinGW64MSYS64文件夾(密鑰: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA ):

在此處輸入圖片說明

添加到路徑

這可以訪問gccmake (兩者都需要):

在此處輸入圖片說明

從您的路徑中刪除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文件夾中(你可以在這里閱讀它們):

在此處輸入圖片說明

Mysql2RMagickPGSQLNokogiri等都使用擴展/庫。

這就是為什么 - 在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM