Heroku抛出错误,而本地主机没有

时间:2014-08-09 00:11:54

标签: ruby-on-rails heroku

我在heroku上运行了一个rails应用程序。在当地一切正常。但是,在推送到heroku时出现错误。

日志说明了这一点:

app/controllers/orders_controller.rb:7:in `create'
ActiveRecord::UnknownAttributeError (unknown attribute: ammo_id):
Started POST "/orders?ammo_id=4" for 96.235.177.110 at 2014-08-09 00:03:09 +0000

即。这是我在第7行的orders_controller中的错误。这是第7行:

@order = @cart.orders.build(ammo_id:params[:ammo_id])

本地运行完美。但是,在heroku上它没有。我将该行更改为:

@order = @cart.orders.build(:ammo_id => params[:ammo_id])

现在它适用于heroku。所以我的问题是,为什么第一种语法不适用于heroku?它与版本有关吗?

2 个答案:

答案 0 :(得分:2)

<强>属性

刚刚回答了这样的另一个问题,我说这问题几乎肯定与您的Heroku数据库没有运行所需的属性有关

这里的问题是你的Rails开发DB&amp; Heroku生产数据库将完全不同,因此,您需要确保已迁移Heroku数据库,因为您拥有本地数据库

修复它的方法是在本地计算机上运行以下命令:

$ heroku run rake db:migrate

-

每当Rails抛出ActiveRecord::UnknownAttributeError时 - 这意味着Rails无法访问模型类中的特定attribute

要理解这一点,您必须记住Rails基本上是一系列classes,它们会加载每个请求。根据{{​​1}}结构,这些类由一系列属性填充。对于Rails,这些属性是从数据库中提取的 - 这意味着如果您的应用程序找不到特定的属性,它只是意味着数据库没有它们

要解决此问题,您必须确保数据库中包含所需的列。此问题最常见的例子是各种模型中缺少foreign_key

答案 1 :(得分:0)

它可能与数据库迁移有关。确保在每次推送后运行heroku run rake db:migrate <your branch stuff here>,以便我们的架构更新到新模型。

另外,你的heroku可能默认为旧版本的ruby。 =&gt; hashes的语法是旧版ruby中的默认语法。但现在{key:value}是一种新的可接受格式。 虽然这不太可能。