【发布时间】:2011-07-07 12:00:57
【问题描述】:
我有一个使用生成器创建的非常简单的迁移
class AddEmailToUsers < ActiveRecord::Migration
def self.up
add_column :users, :email, :string
end
def self.down
remove_column :users, :email
end
end
在本地效果很好
rake db:migrate
rails console
>> User.column_names
=> ["id", "created_at", "updated_at", "uid", "provider", "name", "role", "email"]
我在 Heroku 上有两个版本的应用程序。一方面,它工作正常。另一方面,该列根本不显示。
heroku rake db:migrate 的输出看起来正确:
== AddEmailToUsers: migrating ================================================
-- add_column(:users, :email, :string)
-> 0.0031s
== AddEmailToUsers: migrated (0.0032s) =======================================
但该列不存在:
>> User.column_names
=> ["id", "created_at", "updated_at", "uid", "provider", "name", "role"]
(顺便说一句,我所有的数据库更改都是通过生成器创建的迁移;我自己没有接触过 SQL,也没有编辑任何迁移文件。)
这是一个生产环境,因此不能删除表。
对我可以尝试的事情有什么建议吗?
【问题讨论】:
-
您是否重新启动了控制台?此外,以防万一,请检查您在 heroku 上的数据库以获取更新的表。
-
“重启控制台”是指再次运行heroku控制台吗?如果是这样,那么是的,我做到了。
-
如何检查 Heroku 上的数据库?我可以直接在 Heroku 中运行 SQL 命令吗?
-
不是这样,但您可以 heroku db:pull --tables users 看看其中发生了什么,然后如果可能的话,可能会在本地运行迁移后将表推回去。
-
感谢 cmets。不知何故,它刚刚开始工作。让它工作的事情是在没有任何迁移的情况下对 Heroku 进行 git push。不知道为什么。似乎 Heroku 中可能存在错误。
标签: ruby-on-rails ruby-on-rails-3 heroku