我在将迁移推送到生产数据库时遇到了问题。
问题:
1.我通过添加1列更改了数据库架构。
1.我已将其迁移到生产数据库:
MacBook-Air-Mac:app msc $rake db:migrate RAILS_ENV ="生产"[RailsAdmin]默认情况下禁用RailsAdmin初始化。如果需要,请传递SKIP_RAILS_ADMIN_INITIALIZER = false。== AddLengthColumnToBooks:迁移=================================--添加列(:书籍,:长度,:整数)-〉0.0017s ==添加长度列到书籍:迁移时间(0.0019秒)===========================
1.考虑到新的DB模式现在已经投入生产,我部署了使用:length
执行某些操作的代码。
1.在生产中,我得到了以下错误:
未定义#的方法'length ='
1.我做了heroku rollback
,并将应用程序降级到最新的可靠版本。
1.然后(可能有点太晚了)我发现我必须heroku restart
应用程序才能加载新的索引。我这样做了好几次。
1.然后我打开控制台并检查Book.column_names
,但没有length
1.我又做了一次heroku run rake db:migrate
,然后又做了一次heroku restart
,没有变化。
1.我尝试过将另一列迁移到生产数据库,但根本没有收到任何消息,甚至没有收到来自p.2的消息。
我做错了什么?
- 更新**
根据Philipe的答案,我执行了许多附加步骤:
git add db/schema.rb
、git add db/migrate/20130325103953_add_length_column_to_books.rb
和'git添加db/迁移/2013年04月06日04月04日04月04日04月04日04月04日04月04日04月04日04日04月04日04日04月04日04日04月04日04日04月04日04日04日04月04日04日04日04月04日04日04日04日04月04日04日04日04月04日04日04日04日04月04日04日04日04月04日04日04日04月04日04日04日04月04日04日04日04时04:Git的答案是:
1.要提交的更改:(使用"git reset HEAD ..."取消暂存)
新文件:db/migrate/2013年0325103953年添加长度列到书籍. rb新文件:数据库/migrate/2013年04月10日添加持续时间列到书籍. rb修改日期:数据库/架构. rb
1.然后我做了git commit -m "Updating the schema"
。
1.同样,输出为:
3 files changed, 168 insertions(+), 156 deletions(-)
创建模式100644数据库/迁移/2013年0325103953_添加_长度_列_到_书籍. rb创建模式100644数据库/迁移/2013年0401041910_添加_持续时间_列_到_书籍. rb
1.然后我运行heroku run rake db:migrate
.不幸的是没有迁移的迹象,只是得到:
运行连接到终端的rake db:migrate
...向上,运行.5428,就这样。
1.在生产Rails控制台中,运行Book.column_names
仍然缺少长度和持续时间。
现在我更没主意了。
5条答案
按热度按时间gtlvzcf81#
看起来你并没有在推动Heroku的改变。步骤应该如下;
1.更改本地代码
1.本地运行任何迁移
1.将所有更改的文件添加到Git
git add .
1.将所有添加的文件提交到git
git commit -m "Adding features"
1.将更改推送到Heroku
git push heroku master
-假设您使用heroku
作为远程名称,并且正在master
分支中工作1.如果要进行迁移,请运行
heroku run rake db:migrate
以在HEROKu上运行迁移1.以下迁移执行
heroku restart
这应该是你工作所需要的一切。
pvabu6sv2#
我也有同样的问题i git添加了迁移,git把它们推送到服务器,cap部署了它们,数据库没有变化;直接登录到服务器,运行rake db:migrate,命令行好像运行了迁移,但是什么都没有改变。
在我的例子中,rake db:migrate使用了错误的RAILS_ENV。
rake数据库:迁移RAILS_ENV =生产
这导致数据库创建新列,然后我在测试数据库中调试的所有代码都开始在服务器上工作。
noj0wjuj3#
我遇到了同样的问题,在本地向DB添加一列后,我执行了
heroku run rake db:migrate -app [my app name]
,在生产环境中运行代码,得到了ActiveRecord::UnknownAttributeError (unknown attribute '_____' for [table name].)
这解决了我的问题:
heroku restart --app [my app name]
oogrdqng4#
如果要在
Heroku
上为postgresql
数据库运行迁移,可以在Procfile
中添加此行yxyvkwin5#
根据我的经验,我的意见是:我以为
heroku run db:migrate
也将数据库内容迁移到了生产环境中。没有!只有结构。所以在我的情况下,登录在生产环境中不起作用,因为其中没有用户。我不得不再次注册测试用户,然后它起作用了。希望它能帮助像我这样的新手