namespace :db do task :encrypt_all_columns do require 'travis' Travis::Database.connect to_encrypt = { SslKey => [:private_key], Token => [:token], User => [:github_oauth_token] } encrypted_column = Travis::Model::EncryptedColumn.new to_encrypt.each do |model, column_names| model.find_in_batches(batch_size: 500) do |records| ActiveRecord::Base.transaction do puts "Encrypted 500 of #{model} (last_id: #{records.last.id})" records.each do |record| column_names.each do |column| data = record.send(column) if encrypted_column.encrypt?(data) record.update_column(column, encrypted_column.encrypt(data)) end end end end sleep 10 end end end end