【问题标题】:ActiveRecord::UnknownAttributeError?ActiveRecord::UnknownAttributeError?
【发布时间】:2011-12-29 16:30:56
【问题描述】:

我刚刚将一个应用推送到了生产 Heroku 环境。

基本上有一个Bus 模型,它有一个seats 属性

class Bus < ActiveRecord::Base
  attr_accessible :seats, # other attributes
end

现在我有一个 JavaScript 前端,它将新总线的 JSON POST 到 buses#create 操作。

当我尝试创建总线时,ActiveRecord 一直遇到错误:

: POST www.busables.com/buses dyno=web.1 queue=0 wait=5ms service=65ms status=500 bytes=728
: 
: ActiveRecord::UnknownAttributeError (unknown attribute: seats):
:   app/controllers/buses_controller.rb:31:in `new'
:   app/controllers/buses_controller.rb:31:in `create'

参数达到控制器动作正常。我可以记录它们并得到以下信息:

The bus parameters received: {"seats"=>"24", "departure_time(1i)"=>"2011", "departure_time(2i)"=>"11", "departure_time(3i)"=>"25", "departure_time(4i)"=>"16", "departure_time(5i)"=>"15", "route_attributes"=>{"summary"=>"N51", "beginning_address"=>"A place", "terminal_address"=>"Another place", "distance"=>26362, "duration"=>1753}}

我检查了Bus 表实际上有seats 列,它确实有(我在 Heroku 控制台中运行了这个):

> Bus.column_names
=> ["id", "name", "route_id", "created_at", "updated_at", "price", "departure_time", "trip_distance", "trip_duration", "seats"]

当然,我已经尝试过迁移和加载数据库架构。我检查了attr_accessible :seats 的设置是否正确。

还有其他想法吗?

我在 Heroku Cedar 堆栈上运行 Rails 3.1.1。在我的本地机器上一切正常。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord heroku ruby-on-rails-3.1


    【解决方案1】:

    在我看到上面 Leito 的评论之前,我一直在努力解决这个问题。

    heroku restart --app staging
    

    帮我修好了这个。

    【讨论】:

      【解决方案2】:

      我的 Heroku 应用程序在生产中遇到了同样的问题,但我的 几乎 应用程序在 staging 中没有。

      有什么不同?我的登台应用只有 1 个 web dyno 而不是 2 个。

      所以我手动将我的 Production 应用程序缩减到 0 个 web dynos,然后又恢复到 2 个。

      砰!问题解决了。

      【讨论】:

        【解决方案3】:

        这是陈词滥调,但我早上又试了一次,效果很好!我怀疑这可能是某种传播问题。

        【讨论】:

        • 发生这种情况时,请尝试“heroku 重启”。我只是在运行迁移后遇到了这个问题,但重新启动解决了问题。
        • 我尝试了heroku restart,但它对我不起作用,所以我搜索了这个问题并遇到了这篇文章,然后意识到heroku restart 默认为我的暂存环境。通过heroku restart --app myproductionapp 强制我的生产应用程序工作!
        • 这一定是因为您部署了应用程序,运行了迁移。但是应用程序已经在运行,所以它没有注意到 db 方案的变化。也就是说,你必须restartit
        【解决方案4】:

        试试这个

        attr_reader :seats
        attr_accessor :seats
        

        而不是

        attr_accessible :seats
        

        【讨论】:

        • 问题似乎在一夜之间解决了。可能是传播问题或其他问题。还是谢谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多