gpt4 book ai didi

ruby-on-rails - 我的 Rails 迁移无法运行,我无法部署我的 Rails 应用程序。我怎样才能重新开始?

转载 作者:搜寻专家 更新时间:2023-10-30 20:32:41 25 4
gpt4 key购买 nike

在我的 Rails 开发过程中,我开始在不使用 Rails 迁移的情况下更改数据库(例如删除或更改列/表)。所以现在当我尝试从头开始部署 Rails 应用程序时出现错误。

blaine@blaine-laptop ~/tmp/rbjacolyte $ rake db:migrate
(in /home/blaine/tmp/rbjacolyte)
== AddHashToTrack: migrating =================================================
-- add_column(:tracks, :hash, :string)
rake aborted!
An error has occurred, all later migrations canceled:

Mysql::Error: Table 'jacolyte_dev_tmp.tracks' doesn't exist: ALTER TABLE `tracks` ADD `hash` varchar(255)

(See full trace by running task with --trace)

在使用原始 SQL 搞砸之后,如何将我的生产和开发环境与迁移同步?我想部署我的 Rails 应用程序而不出现数据库错误,我不想从头开始。


生产环境和开发环境数据匹配,但是迁移失败。我想要一种“从头开始”的方法。

我可以简单地删除我拥有的所有迁移,然后从现在开始使用迁移吗?

最佳答案

快捷方式:手动将条目添加到 schema_migrations 以获取表示基线的时间戳。您可以在那之后添加迁移,只要它们不对数据库模式做出任何错误的假设,它们就应该能够正常运行。您将无法向后迁移,但这不是什么大问题。

更大的问题是您将无法从头开始制作数据库,从长远来看这会很痛苦。

解决方法是删除所有现有的迁移并创建一个新的迁移来创建现有的架构。手动删除 schema_migrations 表中的所有内容,并为这个新迁移添加一个条目。之后,您可以创建基于这个新基线的新迁移,它们应该可以正常应用。您应该能够以正常方式引导新数据库。

只要您的直接 SQL 包含在 Rails 迁移中,使用它就没有问题。只要确保同时实现#up 和#down 方法就可以了。实际上,我们已经将使用原始 SQL 作为最佳实践,以避免以后更改模型时出现问题。有点像

Foo.create(:name => 'bar')

似乎无害,直到 User 模型被修改为具有

validates_presence_of :baz

此时新迁移将针对现有数据库运行,但创建表并添加虚拟条目的早期迁移将失败,因为用户未通过验证。刚刚使用

execute("insert into foos (name) values ('bar')")

只要以后的迁移正确填充他们添加的任何新列,就会正常工作。

关于ruby-on-rails - 我的 Rails 迁移无法运行,我无法部署我的 Rails 应用程序。我怎样才能重新开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1965838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com