我已将我的应用推送到Heroku,现在正试图运行'$ heroku rake db:migrate'。我收到这个错误:
PGError:错误:关系“库存”不存在 :选择“库存”。* FROM“库存”
在我的本地机器上一切都很棒。本地使用SQLite 3.此外,该应用程序的早期版本工作得很好 - 以前的版本确实包括库存模型。现在,我已经阅读(几乎)有关此问题的stackoverflow和网络上的每篇文章,但我仍然无法找到解决方法。有没有人建议让它发挥作用?
Ruby 1.9.2 ROR 3
UPDATE .. 以下是创建库存表的迁移源:
class CreateInventories < ActiveRecord::Migration
def self.up
create_table :inventories do |t|
t.decimal :initial_amount, :precision => 10, :scale => 2
t.decimal :remaining_amount, :precision => 10, :scale => 2
t.string :unit
t.decimal :cost, :precision => 10, :scale => 2
t.integer :type_id
t.integer :brand_id
t.integer :blend_id
t.integer :user_id
t.boolean :in
t.timestamps
end
end
def self.down
drop_table :inventories
end
end
答案 0 :(得分:1)
错误表示该表不存在远程。看到这个: http://docs.heroku.com/database#common-issues-migrating-to-postgresql
我希望以前的db:migrate能够创建表,除非在rake db任务之外发生了数据库更改。我发现很容易让它不同步。您可以通过指定所需的迁移方法(向上或向下)以及要执行的迁移的时间戳来运行特定迁移。一个例子:
heroku rake db:migrate:up VERSION=20101108092153
这将运行2010年11月8日上午9:21:53生成的迁移。您可以在db /文件夹中浏览迁移,以查找包含缺失表的迁移。
答案 1 :(得分:1)
您是否在迁移中使用了库存模型?也许您的迁移有错误,例如您在迁移本地数据库后编辑了迁移文件?
在任何情况下,运行rake --trace db:migrate
都应该显示整个错误消息以及堆栈跟踪 - 您将找到有问题的代码行。
更新:
在您的堆栈跟踪(链接在评论中)中有一条可疑行:
...0-d4e1268c8981/mnt/config/environment.rb:5
有什么代码?
答案 2 :(得分:1)
解决方案:我终于弄明白了这个问题。我的用户模型中有这个方法:
def self.search( id )
@inventory = Inventory.where(:primary_user [id])
@cups = Cup.where(:user_id [id])
@inventory + @cups
end
出于某种原因,这导致了错误。我将其更新为使用@user.inventories
和@user.cups
。谢谢大家。