代码之家  ›  专栏  ›  技术社区  ›  codegirl

我的VPS在使用Nginx的Ubuntu上运行时崩溃,无法再次运行

  •  1
  • codegirl  · 技术社区  · 7 年前

    我对设置副总裁很陌生。

    在应用程序坏之前,它一直运行得很好,现在我总是得到 Sorry, something went wrong 刷新页面时显示msg。

    sudo service nginx restart 我重新启动了 postgresql 而且

    deployed 应用程序一次又一次地失败。

    production.log

    有以下消息:

    NoMethodError (undefined method '+' for nil:NilClass):
    app/controllers/application_controller.rb:101:in `each'
    app/controllers/application_controller.rb:101:in `reduce'
    app/controllers/application_controller.rb:101:in `users_stats'
    

    现在这个错误总是出现。即使在所有重启之后。

    all_users_truck_use = User.joins(:transports).where(transports: { transport_type: ['Truck / Lorry', nil] } ).pluck(:transport_km).reduce(:+)
     @all_users_Truck_co2 = all_users_truck_use.nil? ? 0 : all_users_truck_use * @Truck.to_f
    

    我真的很绝望,我需要在周一早上交付这个项目。

    1 回复  |  直到 7 年前
        1
  •  1
  •   spickermann    7 年前

    错误消息 NoMethodError (undefined method '+' for nil:NilClass) + 在…上 nil . 如果您执行以下操作,则会出现该错误 nil + 1 1 + nil 将引发另一个错误。

    101 在你的 application_controller.rb

    all_users_truck_use = User
      .joins(:transports)
      .where(transports: { transport_type: ['Truck / Lorry', nil] } )
      .pluck(:transport_km)
      .reduce(:+)
    

    来自的文档 reduce :

    如果未明确指定备注的初始值,则集合的第一个元素将用作备注的初始值。

    User.joins(:transports).where(transports: { transport_type: ['Truck / Lorry', nil] } ).pluck(:transport_km) 必须是 .

    一个非常简单的解决方案可能是删除 通过调用 compact 之前 :

    all_users_truck_use = User
      .joins(:transports)
      .where(transports: { transport_type: ['Truck / Lorry', nil] } )
      .pluck(:transport_km)
      .compact
      .reduce(:+)
    

    更好的解决方案可能是添加验证,以确保所有数据库记录都具有有效的 transport_km 并清理现有记录。或者完全在 SQL