我刚刚开始使用Ruby on Rails,到目前为止它运行良好。我现在正在尝试实现一个宝石,但它不起作用,我希望它只是一个初学者的错误 - 我尚未掌握的东西!!
我已经按照教程并获得了我的hello world示例 - 还设法将其推送到我的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宝石。
我关闭了本地rails服务器并重新启动。它现在正在运作。不确定是不是因为工作将gem添加到我的root或执行'bundle install'(如下面建议的帖子)。谢谢你的帮助。
答案 0 :(得分:3)
首先尝试将控制器更改为
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。
找到相关文档答案 1 :(得分:1)
您应该在require
方法之外添加各种index
语句。将它们放在那里不会减慢你的速度,但是你要求Ruby确保每次调用方法时都加载它们。最好只需要在代码顶部一次。但是,这不会导致您的问题。
我怀疑您在不同于IRB运行的环境下测试您的服务器。暂时尝试删除有问题的require
语句并将您的HTML模板更改为:
<h1>Environment</h1>
<ul>
<li>Ruby: <%=RUBY_VERSION%></li>
<li>Gems: <%=`gem list`%></li>
</ul>