Rails: PaperclipからActiveStorageへの移行ガイド by thoughtbot(翻訳)

概要 MITライセンスに基いて翻訳・公開いたします。 リポジトリ: paperclip/MIGRATING.md at master · thoughtbot/paperclip 原文更新日: 2018/05/14 サイト: thoughtbot ライセンス: MIT https://github.com/thoughtbot/paperclipより 翻訳後に更新が入っていますのでご注意ください。 History for MIGRATING.md - thoughtbot/paperclip PaperclipからActiveStorageへの移行ガイド by thoughtbot(翻訳) PaperclipとActiveStorageは、いずれも同じような問題に対して類似のソリューションを提供しますので、一方から他方への移行は単純なデータ書き換えとなります。 PaperclipからActiveStorageへの移行手順は次のとおりです。 ActiveStorageデータベースマイグレーションを適用する ストレージを設定する データベースのデータをコピーする ファイルをコピーする アプリのテストを更新する アプリのビューを更新する アプリのコントローラを更新する アプリのモデルを更新する 1. ActiveStorageデータベースマイグレーションを適用する ActiveStorageのインストール指示に沿って進めます。Gemfileにmini_magick gemを追加しておきたいと思うことでしょう。 rails active_storage:install 2. ストレージを設定する こちらもActiveStorageの設定指示に沿って進めます(訳注: リンク先はedgeguidesです)。 3. データベースのデータをコピーする ActiveStorageは、active_storage_blobsテーブルとactive_storage_attachmentsテーブルをファイルメタデータで検索できることを前提とします。Paperclipはこれらのファイルメタデータを、関連付けられたオブジェクトのテーブルに直接保存します。 avatarを1つ持つUserを例に説明します。Paperclipの場合は次のようになります。 class User < ApplicationRecord has_attached_file :avatar end Paperclipマイグレーションによって、次のようなテーブルが生成されます。 create_table “users”, force: :cascade do |t| t.string “avatar_file_name” t.string “avatar_content_type” t.integer “avatar_file_size” t.datetime “avatar_updated_at” end これを以下のテーブルに変換します。 create_table “active_storage_attachments”, force: :cascade do |t| t.string “name”, null: false t.string “record_type”, null: false t.integer “record_id”, null: false t.integer “blob_id”, null: false t.datetime “created_at”, null: false t.index [“blob_id”], name: “index_active_storage_attachments_on_blob_id” t.index [“record_type”, “record_id”, “name”, “blob_id”], name: “index_active_storage_attachments_uniqueness”, unique: true end create_table “active_storage_blobs”, force: :cascade do |t| t.string “key”, null: false t.string “filename”, null: false t.string “content_type” t.text “metadata” t.bigint “byte_size”, null: false t.string “checksum”, null: false t.datetime “created_at”, null: false t.index [“key”], name: “index_active_storage_blobs_on_key”, unique: true end ファイルを元の置き場所から変えないことを前提にする場合、以下がマイグレーションとなります。それ以外の場合は、次のセクションを先に読んでマイグレーションを適宜変更してください。 Dir[Rails.root.join(“app/models/**/*.rb”)].sort.each { |file| require file } class ConvertToActiveStorage < ActiveRecord::Migration[5.2] require ‘open-uri’ def up # PostgreSQLの場合 get_blob_id = ‘LASTVAL()’ # MariaDBの場合 # get_blob_id = ‘LAST_INSERT_ID()’ # SQLiteの場合 # get_blob_id = … Continue reading Rails: PaperclipからActiveStorageへの移行ガイド by thoughtbot(翻訳)