我在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?它与版本有关吗?
答案 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}是一种新的可接受格式。 虽然这不太可能。