gpt4 book ai didi

mysql - Rails 应用程序使用现有数据库 MySQL

转载 作者:行者123 更新时间:2023-11-29 06:12:34 26 4
gpt4 key购买 nike

我是一名 RoR 开发人员,我习惯于使用脚手架等创建自己的数据库。但是我被告知要为现有的填充数据库创建一个 Rails 应用程序。我搜索了一下,发现了这个:

1. write config/database.yml to reference your database.
2. Run "rake db:schema:dump" to generate db/schema.rb. Here's the
documentation:

$ rake -T db:schema:dump
...
rake db:schema:dump # Create a db/schema.rb file that can be
portably used against any DB supported by AR

3. Convert schema.rb into db/migrate/001_create_database.rb:

Class CreateMigration < ActiveRecord::Migration
def self.up
# insert schema.rb here
end

def self.down
# drop all the tables if you really need
# to support migration back to version 0
end
end

但是我看到一些评论说他们丢失了数据,还有一些评论说它有效。我不能冒险从数据库中丢失数据。有人可以给我一些更可靠的解释吗?或者更好的解决方案

最佳答案

我遇到了同样的问题,但我不能使用上面的解决方案。

我的数据库是在 ruby​​ on rails 应用程序之前创建的,它没有创建 schema_migrations 表,所以当它运行时:

if ActiveRecord::Migrator.current_version > 2
# force the next migration 002_create_database.rb to be skipped

ActiveRecord::SchemaMigration.create(version: '2')

# the version '2' above is the version of the file which is (002 becomes 2)
end

它在 if 语句中返回 false,因此,在我的例子中它永远不会跳过 create_database 迁移。

我一直在寻找某种方式来运行迁移并避免再次创建表,同时,新的编码人员可以运行它并创建表。

经过一些搜索,我找到了 table_exists? 函数,所以:

  1. 我使用 rake db:schema:dump
  2. 创建了模式迁移
  3. 然后我创建了我的第一个迁移:001_create_database.rb 并粘贴了 db/schema.rb 文件中的架构
  4. 最后,我在每个创建表之前编辑了迁移添加和 if 语句:

    if !table_exists?("CarsTable")
    create_table "CarsTable" do |t|
    t.bigint "Owner", null: false
    t.string "Color", limit: 20, null: false
    t.string "Make", limit: 40, null: false
    t.string "Model", limit: 20, null: false
    t.string "Plate", limit: 10, null: false
    end
    end

我以两种方式对此进行了测试,使用之前创建和填充的数据库(用于生产案例和我自己的案例)和没有任何数据库(用于新编码员)并且它有效。

关于mysql - Rails 应用程序使用现有数据库 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37543630/

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