Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未定义的方法`+@';对于nil:nilclassrails在迁移到mysql之后_Mysql_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

未定义的方法`+@';对于nil:nilclassrails在迁移到mysql之后

未定义的方法`+@';对于nil:nilclassrails在迁移到mysql之后,mysql,ruby-on-rails,ruby,ruby-on-rails-4,Mysql,Ruby On Rails,Ruby,Ruby On Rails 4,我把数据库移到了云主机上的mysql上。移动数据库后,当我试图访问或将数据保存到数据库时,我开始出现此错误,但一些模型更新工作正常 我正在访问的模型有一些算术计算,我觉得这就是这个问题的原因 错误是 undefined method `+@' for nil:NilClass 我也从rails控制台进行了尝试,但这个命令也出现了同样的错误 设置。全部 我想这是那种方法的一部分 if params[:lat] and params[:lon] and params[:rad] and !para

我把数据库移到了云主机上的mysql上。移动数据库后,当我试图访问或将数据保存到数据库时,我开始出现此错误,但一些模型更新工作正常

我正在访问的模型有一些算术计算,我觉得这就是这个问题的原因

错误是

undefined method `+@' for nil:NilClass
我也从rails控制台进行了尝试,但这个命令也出现了同样的错误

设置。全部

我想这是那种方法的一部分

if params[:lat] and params[:lon] and params[:rad] and !params[:lat].empty? and
                    !params[:lon].empty? and !params[:rad].empty?

  lat = params[:lat].to_f
  lon = params[:lon].to_f
  rad = params[:rad].to_f
  ear = 6371.00

  min_lat = (lat) - (rad/ear)/180.0*Math::PI;
  max_lat = (lat) + (rad/ear)/180.0*Math::PI;

  min_lon = (lon) - (rad/ear/Math.cos(lon*Math::PI/180.0))/180.0*Math::PI;
  max_lon = (lon) + (rad/ear/Math.cos(lon*Math::PI/180.0))/180.0*Math::PI;

  @settings = @settings.includes(:settings_location)
    .where("settings_locations.latitude  > :min_lat AND " \
           "settings_locations.latitude  < :max_lat AND " \
           "settings_locations.longitude > :min_lon AND " \
           "settings_locations.longitude < :max_lon", {
               min_lat: min_lat,
               max_lat: max_lat,
               min_lon: min_lon,
               max_lon: max_lon});

根据这些评论,似乎只有少数情况下您可以在IRB中重现相同的错误消息。第一个是:

foo, bar = nil, nil
foo.send("+@", bar)            # undefined method `+@' for nil:NilClass
二是:

foo = nil
+foo                           # undefined method `+@' for nil:NilClass
eval
上下文中,后者可能更像:

foo, bar = nil, nil
eval("foo = +#{bar.inspect}")  # undefined method `+@' for nil:NilClass
我个人的猜测是,你的问题与后者类似。不是使用
eval
,而是使用其众多Ruby变体之一,如
define\u method
。实际的调用很可能在Rail内部的某个地方,并且与某个未初始化的变量相关——也许MySQL返回null,而SQLite返回的是您没有想到的最近的模式更改导致的结果

就我个人而言,我会一步一步地缩小范围:

一,。点评:

json.location settings_location.to_builder
如果错误消失,则:

2.a)替换为:

builder = settings_location.to_builder
json.location builder
如果错误消息仍然相同,则:

2.b)试试看

…没有障碍


关键是,您希望将范围缩小到导致错误的特定方法,然后深入研究该方法的代码,看看哪些是nil,哪些不应该。(也许块缺少某种返回值?

现在很难判断哪一行是第54行:)现在你应该找到哪一个变量(在那一行)是
nil
并通过调用堆栈进行跟踪,该调用堆栈应设置在该调用堆栈中。第54行是settings.rb文件中的行尾,跟踪后,我达到了我上面提到的方法…:(你的
设置是什么。rb
内容?@Denis是的,真的是
+@
,这是一元
+
操作符。试着运行这个:
+nil
。在我看来,这不像完整的堆栈跟踪。Rails默认情况下隐藏了几个步骤。如果你在浏览器中打开页面,获取堆栈跟踪,然后单击“完整”,你会得到更多的跟踪吗全面的stacktrace?(或者,如果您不想在服务器上执行此操作,您可以添加一个gem来邮寄错误,或者使用诸如sentry或appsignal之类的服务来跟踪错误)感谢您的回答,但它不起作用,我非常确定我没有更改任何迁移文件,所以我想没有任何模式更改的机会,现在我将尝试分析每一个和所有内容…我不知道,我尝试了几乎所有我可以做的,但同样的结果尝试调试它与各种宝石,但无法解决问题…我评论ed完全设置模型,但仍然是相同的问题…还有其他建议吗please@user1618:通过注释掉代码直到它消失,您是否成功隔离了触发错误的原因?我逐个注释掉了完整的设置模型..但在运行“settings.all”时,找不到它消失的行从任何地方都会出现相同的错误…我删除了许多已定义的关系…我正在使用MySql的是mariaDB吗?或者任何其他建议…坦率地说,我不认为我或任何其他人可以做更多的事情来帮助目前的情况。在我做的事情中,强调我将如何继续调试这是我能做的最好的事情,即评论事情直到错误消失,取消注释,然后深入到相关函数的代码中,注释掉其中的内容,直到错误消失,依此类推,直到剥离所有层并确定真正触发错误的较低级别代码。从那里,您将知道什么参数是罪魁祸首,并且可以跟踪使用
调用者
确定原因,将其返回到其来源。
json.location settings_location.to_builder
builder = settings_location.to_builder
json.location builder
Jbuilder.new