代码之家  ›  专栏  ›  技术社区  ›  Sagar Pandya

迁移后更改的架构选项

  •  0
  • Sagar Pandya  · 技术社区  · 2 年前

    当我在rails中运行以下迁移文件时:

    class CreateSearchLogs < ActiveRecord::Migration[5.2]
      def change
        create_table :search_logs do |t|
          t.timestamp :created_at
          t.string :query
          t.integer :results_count
          t.string :first_5_results
          t.string :first_result_url
        end
      end
    end
    
    

    这个选项“COLLATE=utf8mb4_general_ci”被添加到模式中许多表的选项中。例如,下表中:

    # schema.rb
    create_table "suppliers", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC", force: :cascade do |t|
    

    正在更新为

    # schema.rb
    create_table "suppliers", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC", force: :cascade do |t|
    

    这是本地的。我尝试过各种不同的迁移,但都没有成功。

    如果没有这些额外的更改,我如何运行迁移?

    0 回复  |  直到 2 年前
        1
  •  2
  •   kwerle    2 年前

    以下是发生的情况:

    当您运行迁移时,rails会执行db:schema:dump。这将从当前数据库映像中重新创建架构文件。它将包括各种选项,具体取决于您当前使用的数据库。我不确定是否有办法关掉这些——我看不到任何办法。

    这些选项的目标是使模式创建的任何新数据库尽可能接近您现在拥有的数据库。但请记住,它们是可供选择的。如果有人使用与你相同的数据库类型,那么你希望他们在那里。如果有人使用不同类型的数据库,那么它将忽略任何不能使用的选项。

    如果您担心这些选项会影响现有数据库,那么它们不会。运行迁移会影响这一点。

    如果您担心模式选项不同,因为您认为它们不应该是(即生产/现有模式和数据库存在),那么很可能您的数据库选项/配置与生产中的不匹配。您可能需要更改本地数据库配置,以更接近生产中的配置。

    不过,大多数情况下,你可能不应该担心。