gpt4 book ai didi

ruby-on-rails - 为什么 rake 会抛出这个 Rails 迁移错误?

转载 作者:行者123 更新时间:2023-12-04 06:09:28 24 4
gpt4 key购买 nike

我有两台机器……一台开发机和一台生产机。当我第一次将 Rails 应用程序带到生产服务器时,我没有遇到任何问题。我只是通过运行 rake db:schema:load RAILS_ENV=production 导入了 schema.rb。一切都好。

所以,然后在我的开发机器上,我做了一些更多的更改和另一个迁移,然后将新应用程序复制到生产机器上。然后我尝试通过运行 rake db:migrate RAILS_ENV=production 来更新数据库。我收到以下错误:
“数据库中已经有一个名为‘schema_migrations’的对象。”

我在想,你不是开玩笑的 Rake...你创造了它!我在 rake 上运行了 trace,似乎 rake 认为这是它第一次运行。但是,通过分析我的开发机器和生产机器上的“schema_migrations”表,您可以看到一次迁移存在差异,即我要迁移的迁移。

我还尝试明确定义版本号,但这也不起作用。

关于如何更新我的生产服务器的任何想法?

更新:

首先让我说我不能只是“删除”数据库。这是一个生产服务器,里面已经有超过 10 万条记录。如果将来发生类似的问题会怎样?是,每次发生数据库问题时我都删除表吗?这一次可能会奏效,但它似乎不是每个数据库问题的实用长期解决方案。我怀疑我现在遇到的问题是我独有的。

  • 听起来像“schema_info”表和“schema_migrations”表是一样的。在我的设置中,我只有“schema_migrations”。如前所述,生产服务器和开发机器上的 'schema_migrations' 表之间的差异只是一个记录。即,包含我要迁移的更改的版本号的记录。
  • 在我读过的《Simply Rails 2》一书中,它指出当第一次移动到生产服务器时,不要运行 rake db:migrate,而应该只运行 rake:db:schema:load。
  • 如果重要的话,我使用的是 Rails 2.1 版。
  • 最佳答案

    这是一个猜测,我承认:我认为因为您首先在生产环境中运行 db:schema:load 而不是 db:migrate,您获得了 db 的结构,但没有迁移到 schema_info 表中的数据。所以现在,当您在生产环境中运行 migrate 时,schema_info 中没有数据,这就是为什么 migrate 认为它还没有运行(因为它没有)。

    也就是说...你说你已经查看了“schema_migrations”表,并且从开发到生产有一个版本的差异......我没有听说过那个表,虽然我几个月了落后于我的 rails 版本。也许您可以尝试在生产环境中创建一个“schema_info”表,只有一个“版本”列,并添加一行,其中包含您认为生产环境将使用的版本。

    关于ruby-on-rails - 为什么 rake 会抛出这个 Rails 迁移错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/234233/

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