首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义方法`to_sym‘on nil: Rails地编码器引起的rubysl/net/http/http.rb上的NilClass

未定义方法`to_sym‘on nil: Rails地编码器引起的rubysl/net/http/http.rb上的NilClass
EN

Stack Overflow用户
提问于 2015-07-09 04:17:12
回答 1查看 230关注 0票数 0

因此,我在Rails上开发了一个使用地编码器 gem的网站。

以下是我的实现:

代码语言:javascript
复制
def User < ActiveRecord::Base    
    before_save :geocode
    geocoded_by :address do |usr, geocode_results|
    if geo = geocode_results.first
       usr.latitude  = geo.latitude
       usr.longitude = geo.longitude
       usr.geocode_address = geo.address
    else
      usr.latitude  = nil
      usr.longitude = nil
      usr.geocode_address = nil
    end
end

一开始它起作用..。但是在2-3天后,我会看到一个错误,在任何调用undefined method to_sym on nil:NilClass.的控制器操作上都会说@user.save

我进一步研究了一下,下面是堆栈跟踪:

代码语言:javascript
复制
Stacktrace (most recent call first):   
kernel/delta/kernel.rb:78:in `to_sym (method_missing)'
rubysl/net/http/http.rb:576:in `start'
   key = $1.to_sym
kernel/common/enumerable.rb:217:in `grep'
kernel/bootstrap/array.rb:76:in `each'
kernel/common/enumerable.rb:213:in `grep'
rubysl/net/http/http.rb:575:in `start'
    http.methods.grep(/\A(\w+)=\z/) do |meth|
geocoder/lookups/base.rb:268:in `make_api_request'
    http_client.start(uri.host, uri.port, use_ssl: use_ssl?) do |client|
rubysl/timeout/timeout.rb:149:in `timeout'
    yield sec
rubysl/timeout/timeout.rb:168:in `timeout'
     Timeout.timeout(n, e, &block)
geocoder/lookups/base.rb:266:in `make_api_request'
    timeout(configuration.timeout) do
geocoder/lookups/base.rb:218:in `fetch_raw_data'
    response = make_api_request(query)
geocoder/lookups/base.rb:169:in `fetch_data'
    parse_raw_data fetch_raw_data(query)
geocoder/lookups/google.rb:28:in `results'
    return [] unless doc = fetch_data(query)
geocoder/lookups/base.rb:47:in `search'
    results(query).map{ |r|
geocoder/query.rb:11:in `execute'
    lookup.search(text, options)
geocoder.rb:21:in `search'
    query.blank? ? [] : query.execute
geocoder/stores/base.rb:111:in `do_lookup' 
    results = Geocoder.search(query, query_options)
geocoder/stores/active_record.rb:259:in `geocode'
    do_lookup(false) do |o,rs|   active_support/callbacks.rb:424:in `make_lambda'
    lambda { |target, _, &blk| target.send filter, &blk }

事实证明,to_sym for nil:NilClass错误的罪魁祸首--似乎grep没有发现任何东西?

Rails地理编码器这里正在调用该这里

我怀疑这是一个rbx-2.2.1问题,所以我将尝试切换到ruby-2.2.1,看看它是否会在接下来的几天发生。这事有没有发生在任何人身上?

编辑:如果我重新启动我的rails服务器线程,问题就会消失,但会在1-2天后回来。

编辑:这是导致问题的user_controller

代码语言:javascript
复制
respond_to do |format| #line 169
    @id = @user.id
    @user.update(user_params) #line 171
    if params[:user][:redirect_to_index].present? or @user.chef?
        format.html { redirect_to root_path }
        format.json { render :show, status: :ok, location: @user }
    else
        format.html { redirect_to @user }
        format.json { render :show, status: :ok, location: @user }
    end
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-19 05:26:02

我修正了这个问题,从rbx-2.2.1改为ruby-2.2.1.它似乎是由Geo编码器和rbx-2.2.1之间的一些错误引起的(我认为)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31308043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档