ブログ プラットフォームのアップデートで、記事をより視覚的に魅力的にするためにサムネイル画像列を追加する必要がありました。この更新では、すべての記事を 1 つのページに表示することから、各記事を個別のページに表示するように変更され、記事の数が増えるにつれてナビゲーションが改善されました。
サムネイル列には、画像へのリンクを表す文字列が格納されます。このアプローチでは、データベースを軽量に保ち、画像ストレージを別の場所で処理することで懸念を分離します。
まず、BlogPosts モデルを更新してサムネイル列を含めました。 allowNull: true を設定すると、サムネイルの追加がオプションになり、サムネイルがまだない古い投稿の問題が回避されました:
thumbnail: { type: DataTypes.STRING, allowNull: true, // Optional for older posts },
しかし、このモデルの変更だけでは十分ではありませんでした。 Postgres データベースは新しい列を認識できず、次のエラーが発生しました:
エラー: 「サムネイル」列が存在しません
これは、Sequelize モデルがアプリケーションがデータベースと対話する方法を定義しますが、データベース スキーマを自動的に変更しないために発生します。これを解決するには、Sequelize 移行を使用する必要がありました。
移行を作成する前に、Sequelize CLI がプロジェクトで初期化されていることを確認しました。 config/ フォルダーと関連セットアップを作成する次のコマンドを実行する前に、必ず最初に「npm install Sequelize-cli
」と入力してインストールしてください。npx sequelize-cli init
config/ フォルダー内で、config.json の代わりに config.js ファイルを使用することにしました。これにより、設定に dotenv で環境変数を使用できるようになりました。
require('dotenv').config(); module.exports = { development: { username: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, host: process.env.DB_HOST, dialect: "postgres", }, production: { username: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, host: process.env.DB_HOST, dialect: "postgres", }, };
その後、競合を避けるために config.json ファイルを削除しました。
次に、次のコマンドを使用して、サムネイル列を追加するための移行ファイルを作成しました。
npx sequelize-cli 移行:generate --name add-thumbnail-to-blogposts
これにより、migrations/ フォルダーに次のような名前の新しいファイルが作成されました。
20241206232526-add-thumbnail-to-blogposts.js
このファイルを変更して新しい列を追加しました:
module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.addColumn('blogposts', 'thumbnail', { type: Sequelize.STRING, allowNull: true, }); }, down: async (queryInterface) => { await queryInterface.removeColumn('blogposts', 'thumbnail'); }, };
移行の適用
開発データベースを更新するために、次のコマンドを実行しました:
npx sequelize-cli db:移行
これにより、ブログ投稿テーブルにサムネイル列が正常に追加され、各記事の画像リンクを保存できるようになりました。
デプロイされたバージョンのデータベースについては、次の手順に従いました。
Backup the Production Database: Before making changes, I downloaded a backup to safeguard against misconfigurations. Copy the Migration Files: I ensured the updated config.js file and add-thumbnail-to-blogposts.js migration file were present in the server repository. Set Environment Variables: I verified that the production environment variables required by dotenv were configured correctly. These were set in the Setup Node.js App section of cPanel. Run the Migration: I navigated to the backend app directory in the production terminal and ran:
npx sequelize-cli db:merge --envproduction
これにより、実稼働 Postgres データベースにサムネイル列が正常に追加されました。
サムネイル欄の追加により、ブログ記事ごとに画像を表示できるようになり、見た目の美しさと使いやすさが向上しました。これらの手順は、Sequelize 移行を使用してデータベースに新しい列を追加するための構造化された反復可能なアプローチを提供します。これは、モデルとデータベース間の同期を維持するために重要です。
以上がSequelize 移行で新しい列を追加する手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。