gpt4 book ai didi

ruby-on-rails - Rails Spree 项目 - Git 上的其他贡献者无法访问数据库

转载 作者:行者123 更新时间:2023-12-04 11:49:56 25 4
gpt4 key购买 nike

我和 friend 一起开始了一个 Rails Spree 项目,我们使用 GitHub 进行版本控制。

我已经在我的机器上创建了示例项目,并在其上安装了 Spree 功能。这将创建一个包含示例产品的数据库,如下所示:

enter image description here

当我的 friend 在他的机器上克隆项目并导入它时,运行 rails server失败 MigrationException并让他跑 rake db:migrate .

运行 rake db:migrate在不存在的 db 列上进行几次迁移后失败。

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: no such column: spree_calculators.deleted_at: SELECT "spree_calculators".* FROM "spree_calculators" WHERE "spree_calculators"."deleted_at" IS NULL ORDER BY "spree_calculators"."id" ASC LIMIT 1000C:in `find_each'
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:15:in `migrate_preferences'
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:4:in `up'
C:in `migrate'
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: spree_calculators.deleted_at: SELECT "spree_calculators".* FROM "spree_calculators" WHERE "spree_calculators"."deleted_at" IS NULL ORDER BY "spree_calculators"."id" ASC LIMIT 1000
C:in `find_each'
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:15:in `migrate_preferences'
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:4:in `up'
C:in `migrate'
SQLite3::SQLException: no such column: spree_calculators.deleted_at
C:in `find_each'
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:15:in `migrate_preferences'
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:4:in `up'
C:in `migrate'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

之后,运行 rails server再次成功,但在他的示例页面中看不到任何产品或其他项目,如下所示:

enter image description here

数据库肯定有问题 .部分或全部无法访问,可能是由于安全问题,因为我们正在共享数据库,但我找不到解决方案。或者这只是一个拙劣的迁移问题

有任何想法吗?

最佳答案

Rails 迁移有时会在您的实时环境中过时。如果您有一个单独的数据库团队来更新您的生产环境并且忘记为它进行迁移,就会发生这种情况。如果您更新迁移,忘记重新运行它们,或者以某种方式进入不一致状态,也会发生这种情况。

最好的这样做的方法是让项目中的新开发人员运行 rake db:schema:load .这将从您的 db/schema.rb 文件加载数据库结构,该文件将尽可能更新所有内容。之后,您可以运行 rake db:migrate只是为了验证一切都已迁移。

但是,在那之后,您将拥有数据库的结构,而不是数据库的内容。假设您有一个用户表,其中 dimitris@example.com 作为用户。您的同事将拥有一个没有用户的用户表。

要解决这个问题,您可以编辑 db/seeds.rb 文件。在那里,您可以执行以下操作:

User.create(name: 'Dimitris Sfounis', email: 'dimitris@example.com', password: 'password123')
User.create(name: 'Some Colleague', email: 'colleague@example.com', password: 'password123')
Product.create(name: 'Ruby on Rails Tote', price: 15.99)
Product.create(name: 'Ruby on Rails Bag', price: 22.99)

这里的想法是您创建 演示 数据,足以在一个全新的空数据库中启动、运行和测试内容。有了这个, rake db:seed将提供足够的数据来运行应用程序。

如果这还不够好,并且您想要所有开发人员的数据库的精确副本,您可以上传您的 SQLite 数据库,并让他们每个人在他们拉下数据库时下载一个新副本。但是,这很难管理,因为每次有人用新的迁移更新 master 分支时,您都需要更新 SQLite 文件。对于其他数据库,您可以使用 pg_dump (Postgres) 或 mysqldump (MySQL) 进行转储和恢复。

关于ruby-on-rails - Rails Spree 项目 - Git 上的其他贡献者无法访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33101806/

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