簡體   English   中英

在Rails中不能要求'nokogiri'(但在irb中工作)

[英]Cannot require 'nokogiri' in Rails (but works in irb)

我剛剛開始使用Ruby on Rails,到目前為止它運行良好。 我現在正在嘗試實現一個寶石,但它不起作用,我希望它只是一個初學者的錯誤 - 我尚未掌握的東西!

我已經按照教程並獲得了我的hello world示例 - 也設法將git推送到我的Heroku帳戶。 我開始按照這里的教程: http//railscasts.com/episodes/190-screen-scraping-with-nokogiri並在終端中使用以下代碼(在mac上)

require 'rubygems'
require 'nokogiri'
require 'open-uri'

url = "http://www.walmart.com/search/search-ng.do?search_constraint=0&ic=48_0&search_query=batman&Find.x=0&Find.y=0&Find=Find"
doc = Nokogiri::HTML(open(url))
puts doc.at_css("title").text

所以這很好用。 我可以在終端內看到標題。 但是,當我嘗試將此代碼放在我的視圖控制器中時,它找不到nokogiri gem。 我的控制器中的代碼是

class HomeController < ApplicationController
    def index
        require 'rubygems'
        require 'nokogiri'
        require 'open-uri'

        url = "http://www.walmart.com/search/search-ng.do?search_constraint=0&ic=48_0&search_query=batman&Find.x=0&Find.y=0&Find=Find"
        doc = Nokogiri::HTML(open(url))
        @mattVar = doc.at_css("title").text
    end
end

那么在我的HTML中,我有

<h1>Hello!</h1>
<p><%= @mattVar %></p>

哪個應該在終端窗口中輸出標題。 但是,我得到一個錯誤,說no such file to load -- nokogiri

我出錯的任何想法?
如果我做gem list我可以看到那里的nokogiri寶石。


UPDATE

我關閉了本地rails服務器並重新啟動。 它現在正在運作。 不確定是不是因為工作將gem添加到我的root或執行'bundle install'(如下面建議的帖子)。 謝謝您的幫助。

首先嘗試將控制器更改為類似的東西

class HomeController < ApplicationController
    require 'nokogiri'
    require 'open-uri'

    def index
        url = "http://www.walmart.com/search/search-ng.do?search_constraint=0&ic=48_0&search_query=batman&Find.x=0&Find.y=0&Find=Find"
        doc = Nokogiri::HTML(open(url))
        @mattVar = doc.at_css("title").text
    end
end

我猜你也在使用bundler,檢查你是否包含了這個gem並運行bundle install。

您可以在http://gembundler.com/找到相關文檔。

  1. 您應該將各種require語句放在index方法之外。 將它們放在那里不會減慢你的速度,但是你要求Ruby確保每次調用方法時都加載它們。 最好只需要在代碼頂部一次。 但是,這不會導致您的問題。

  2. 我懷疑您在不同於IRB運行的環境下測試服務器。暫時嘗試刪除有問題的require語句並將HTML模板更改為:

     <h1>Environment</h1> <ul> <li>Ruby: <%=RUBY_VERSION%></li> <li>Gems: <%=`gem list`%></li> </ul> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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