我在将迁移推送到生产数据库时遇到问题。
问题:
- 我通过添加 1 列更改了数据库架构。
我已将其迁移到生产数据库:
MacBook-Air-Mac:app msc$ rake db:migrate RAILS_ENV="production" [RailsAdmin] RailsAdmin 初始化默认禁用。如果需要,请传递 SKIP_RAILS_ADMIN_INITIALIZER=false。== AddLengthColumnToBooks: 迁移 ==========================================--add_column( :books, :length, :integer) -> 0.0017s == AddLengthColumnToBooks: 已迁移 (0.0019s) ============================ ====
考虑到新的数据库模式现在已经投入生产,我已经部署了使用
:length
.在生产中,我收到以下错误:
未定义的方法 `length=' for #
我做
heroku rollback
了并将应用程序降级到最新的可靠版本。然后(可能有点太晚了)我发现我必须
heroku restart
在应用程序中加载新索引。我这样做了好几次。然后我打开控制台并检查
Book.column_names
,但没有length
我确实
heroku run rake db:migrate
又跟着了heroku restart
一次,没有变化。我尝试将另一列迁移到生产数据库,但根本没有收到任何消息,甚至没有来自 p.2 的消息。
我在这里做错了什么?
更新
根据Philipe的回答,我做了一些额外的步骤:
git add db/schema.rb
,git add db/migrate/20130325103953_add_length_column_to_books.rb
和 'git add db/migrate/20130401041910_add_duration_column_to_books.rb'。吉特的回答是:要提交的更改:(使用“git reset HEAD ...”取消暂存)
新文件:db/migrate/20130325103953_add_length_column_to_books.rb 新文件:db/migrate/20130401041910_add_duration_column_to_books.rb 修改:db/schema.rb
然后我做到了
git commit -m "Updating the schema"
。同样的输出是:
3 files changed, 168 insertions(+), 156 deletions(-)
创建模式 100644 db/migrate/20130325103953_add_length_column_to_books.rb 创建模式 100644 db/migrate/20130401041910_add_duration_column_to_books.rb
然后我跑
heroku run rake db:migrate
。不幸的是,没有迁移的迹象,只是得到了:运行
rake db:migrate
连接到终端... up, run.5428 就是这样。在生产 Rails 控制台中,运行
Book.column_names
仍然缺乏长度和持续时间。
现在我更没有想法了。`