Rails アプリでオンラインでカラムの削除やリネームを行うには

前提知識


Rails 

 Rails  N+1  includes (eager_load)  SELECT  t0_r0  Rails 

 Rails 

Rails 5.x 


Rails 5.0  ignored_columns  Rails   Rails  Rails 5.0 

https://github.com/rails/rails/pull/21720




(一) ()

(二)Model.ignored_columns  (1)

(三)

(四)Model.ignored_columns 



Rails 4.x 


ignored_columns 使DB  MySQL 使 mysql2 adapter 
module ActiveRecordInvisibleColumn
  INVISIBLE_COLUMNS = {
    'foos' => ['bar'],
  }.freeze
  def columns(table_name)
    super.delete_if { |column| INVISIBLE_COLUMNS.fetch(table_name, []).include?(column.name) }
  end
end

ActiveSupport.on_load :active_record do
  ActiveRecord::ConnectionAdapters::Mysql2Adapter.prepend(ActiveRecordInvisibleColumn)
end

 foos  (DB使)   Rails 5.x  ignored_columns   Rails 

 Rails 5.0  ignored_columns 使