heroku undefined方法空?将我的应用程序升级到ruby 2.0时

map*_*ap7 12 ruby ruby-on-rails heroku

我最近将我的Heroku应用程序从Cedar-10升级到了Cedar-14,没有任何问题(仍然使用ruby 1.9.3).然后我尝试升级我的应用程序以使用ruby 2.0.0-p645并将其推送到heroku服务器.当我这样做时,我无法再访问我的应用程序,并在日志中收到以下错误;

2015-07-09T12:27:37.480991+00:00 app[web.1]: 
2015-07-09T12:27:37.480996+00:00 app[web.1]: NoMethodError (undefined method `empty?' for nil:NilClass):
2015-07-09T12:27:37.480998+00:00 app[web.1]:   app/controllers/wines_controller.rb:18:in `index'
2015-07-09T12:27:37.480999+00:00 app[web.1]: 
2015-07-09T12:27:37.481001+00:00 app[web.1]: 
2015-07-09T12:27:37.481462+00:00 app[web.1]: Processing by WinesController#index as HTML
2015-07-09T12:27:37.481465+00:00 app[web.1]: Completed 500 Internal Server Error in 100.1ms
Run Code Online (Sandbox Code Playgroud)

如果我看看wine_controller的第18行,我有以下几点;

respond_to do |format|
  format.html
  format.json {render json: @wines.as_json}
end
Run Code Online (Sandbox Code Playgroud)

我认为这是我的index.html中的内容,所以我把它拿回来了;

%h1 Wines
Run Code Online (Sandbox Code Playgroud)

在我的index.html.haml中只有这一行它仍然有问题.

如果我尝试访问wines.json这可以工作并给我一份我的葡萄酒清单.使用2.0.0在我的开发盒上运行工作正常,我的所有测试都通过了.

更新:在index.html上添加控制器和更多信息

这是我的葡萄酒控制器

  def index
    # Search via Ransack
    @q = current_user.wines.includes(:wine_rack).unconsumed.order("LOWER(winery)").search(params[:q])
    @wines = @q.result.page params[:page]
    @total = @q.result.sum(:qty)

    respond_to do |format|
      format.html
      format.json {render json: @wines.as_json}
    end
  end
Run Code Online (Sandbox Code Playgroud)

关于我的index.html.haml文件,我上传了我的项目版本,其中只包含了这一行;

%h1 Wines
Run Code Online (Sandbox Code Playgroud)

视图中没有发生循环,我仍然得到错误.

第18行指的是我控制器中的以下行;

    respond_to do |format|
Run Code Online (Sandbox Code Playgroud)

map*_*ap7 5

我找到了答案.我不得不升级我的newrelic_rpm.这是我改变的唯一的东西,现在它的工作原理.

-    newrelic_rpm (3.5.0)
+    newrelic_rpm (3.12.1.298)
Run Code Online (Sandbox Code Playgroud)

我测试了加载另一个heroku实例并在那里发送我的应用程序几次控制器和视图的各个部分切掉,没有任何改变,直到我评论了newrelic_rpm gem并且它开始工作.所以我升级它而不是删除宝石,现在它的工作原理.

我删除它的唯一原因是我在寻找开发和生产之间的差异.它在我的Gemfile中被标记为仅生产的gem.

  • 然后单击复选标记以便我们知道它有效 (2认同)