Heroku运行rake db:迁移导致数据库无变更,应用程序重启数次

sauutmhj  于 2023-02-13  发布在  其他
关注(0)|答案(5)|浏览(96)

我在将迁移推送到生产数据库时遇到了问题。
问题:
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的答案,我执行了许多附加步骤:

  1. git add db/schema.rbgit 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仍然缺少长度和持续时间。
现在我更没主意了。

gtlvzcf8

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
这应该是你工作所需要的一切。

pvabu6sv

pvabu6sv2#

我也有同样的问题i git添加了迁移,git把它们推送到服务器,cap部署了它们,数据库没有变化;直接登录到服务器,运行rake db:migrate,命令行好像运行了迁移,但是什么都没有改变。
在我的例子中,rake db:migrate使用了错误的RAILS_ENV。
rake数据库:迁移RAILS_ENV =生产
这导致数据库创建新列,然后我在测试数据库中调试的所有代码都开始在服务器上工作。

noj0wjuj

noj0wjuj3#

我遇到了同样的问题,在本地向DB添加一列后,我执行了heroku run rake db:migrate -app [my app name],在生产环境中运行代码,得到了ActiveRecord::UnknownAttributeError (unknown attribute '_____' for [table name].)
这解决了我的问题:
heroku restart --app [my app name]

oogrdqng

oogrdqng4#

如果要在Heroku上为postgresql数据库运行迁移,可以在Procfile中添加此行

release: alembic upgrade head
yxyvkwin

yxyvkwin5#

根据我的经验,我的意见是:我以为heroku run db:migrate也将数据库内容迁移到了生产环境中。没有!只有结构。所以在我的情况下,登录在生产环境中不起作用,因为其中没有用户。我不得不再次注册测试用户,然后它起作用了。希望它能帮助像我这样的新手

相关问题