冒险村13 - migration notes

13 - migration notes

Database GUI

上个专案跟这个专案刚好 db 都是用 mysql,分享一下汇入资料的方法,还有一些 migration 问题的一些笔记,另外个人满推以下两种 database 的 GUI:

两者都满好用的也其实都差不多,因为同事都用 Sequal Pro 还有个人刚好也偏好,所以後来主要都是用 Sequal Pro。

连结的方式也很容易,点选左下角的 + 号来新增 new favorite database 名称,还有设定一些 config 来连结即可,最常用的大概就是把 staging/production 的 database 弄到 local 来重现问题。

点选 export 後选取需要的 table 并输出 SQL file,详细的其他需求就看当下需要的使用情况。

import sql to database in local

  mysql -u root `database_name` < ~/Desktop/export_database_name_with_date_time.sql

database_name 看要汇入的资料库是哪一个?对应各个 database 後的 ENV 名称,Rails 6 也支援 multiple database,详细可以参考 active_record_multiple_databases

  # config > database.yml

  default: &default
  writer:
    adapter:  mysql2
    encoding: utf8mb4
    pool:     20
    host:     <%= ENV['DATABASE_WRITER_HOST'] %>
    database: <%= ENV['DATABASE_NAME'] %>
    username: <%= ENV['DATABASE_USER'] %>
    password: <%= ENV['DATABASE_PASS'] %>
    charset:  utf8
  reader:
    adapter:  mysql2
    encoding: utf8mb4
    pool:     20
    host:     <%= ENV['DATABASE_READER_HOST'] %>
    database: <%= ENV['DATABASE_NAME'] %>
    username: <%= ENV['DATABASE_USER'] %>
    password: <%= ENV['DATABASE_PASS'] %>
    charset:  utf8
  anotherdb:
    adapter:  mysql2
    encoding: utf8
    pool:     20
    host:     <%= ENV['ANOTHERDB_HOST'] %>
    database: <%= ENV['ANOTHERDB_NAME'] %>
    username: <%= ENV['ANOTHERDB_USER'] %>
    password: <%= ENV['ANOTHERDB_PASS'] %>
    migrations_paths: "db/anotherdb_migrate"
  # ...

Add column after specific field

时不时会有新的栏位需要新增的到旧有的 table 里面,但预设 default 的都会在 updated_at 之後,不管是在 GUI 里看或者是 console 里面看都会满不容易观看的,且如果是与原本的栏位有关联,会偏向摆在一起,因此我们可以在 migration 中带 after option 来告知新增在哪个栏位之後,也因为会是先跑 first_name 再跑 last_name 栏位的新增,自然而然 last_name 要新增时可以排在 first_name 之後。

  # 20210914230020_add_first_name_and_last_name_to_user.rb
  class AddFirstNameAndLastNameToUser < ActiveRecord::Migration[6.1]
    def change
      add_column :users, :first_name, :string, after: :id
      add_column :users, :last_name,  :string, after: :first_name
    end
  end

Explicitly specify a Model's table-name

在建立 table_name 的时候有时候刚好撞到 rails 的惯例,但又不想要取惯例的名字的时候,会需要想设定自己想要的 Table 名称,像是名为 Index class,Rails 预设会是 indices,但可能对我们来说很不直觉,想要取叫做 indexes 比较合适

  # migration
  class CreateIndexes < ActiveRecord::Migration[6.1]
    def change
      create_table :indexes do |t|
        # ...
        t.timestamps
      end
    end
  end

  # app > models > index.rb
  class Index < ApplicationRecord
    self.table_name = "indexes"
  end

参考来源

My blog


<<:  Day14 CSS一

>>:  GCP IAP

【Day14】数据展示元件 - Card

元件介绍 Card 是一个可以显示单个主题内容及操作的元件,通常这个主题内容包含图片、标题、描述或是...

虹语岚访仲夏夜-16(打杂的Allen篇)

这什麽东西啊...我看着Asuka的信箱... 「你看,你那种想笑又不笑的脸,很讨厌耶。」 『他们发...

[Day 10] - Spring Boot 实作登入验证(四)(JWT登入验证)

今天就来完成登入验证的部分! 昨天已经完成发送帐号密码到api,验证ok即发送一笔JWT给clien...

课堂笔记 - 深度学习 Deep Learning (5) Lab1

用python实作PLA (直接把训练资料写进程序里) 昨天才发现之前就交出去的作业code不小心...

观察 Firefox Chrome 网页 DNS 查询哪些 Domain

观察 Firefox Chrome 网页 DNS 查询哪些 Domain Windows 有工具软件...