[英]Rails Cannot require 'nokogiri/nokogiri', though IRB can
[英]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宝石。
我关闭了本地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/找到相关文档。
您应该将各种require
语句放在index
方法之外。 将它们放在那里不会减慢你的速度,但是你要求Ruby确保每次调用方法时都加载它们。 最好只需要在代码顶部一次。 但是,这不会导致您的问题。
我怀疑您在不同于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.