Bboysoul's Blog

首页 公告 RSS

umami1.0更新到2.0

April 18, 2023 本文有 868 个字 需要花费 2 分钟阅读

简介

今天umami发布了2.0的更新,所以就想着更新下,坑还是有一点的

官方文档

https://umami.is/docs/migrate-v1-v2

操作

首先看下官方文档

1.0到2.0的变化还是很大的,首先表结构变了,然后ui也变了,api接口也变了,就连追踪脚本也从 umami.js改为script.js

操作首先要备份你的数据库,这个很重要,一定要备份,不然出错了绝对JJ

不推荐使用

cd umami
yarn add @umami/migrate-v1-v2
npx @umami/migrate-v1-v2

这个方法去更新,因为会有问题,详细可以看

https://github.com/umami-software/umami/issues/1888

我使用的是mysql的数据库,之后就是运行一个node容器,当然在系统里面直接安装node也可以

docker run -it node bash

之后clone下面这个项目

git clone https://github.com/umami-software/migrate-v1-v2.git

cd migrate-v1-v2

之后创建.env文件

DATABASE_URL=mysql://root:[email protected]:3306/umami

然后运行

yarn install

yarn build

yarn start

yarn start的时候一直提示我

✗ Database v1 tables are not ready for migration.

我看了一下源码

async function checkV1TablesReady() {
  try {
    await prisma.$queryRaw`select * from v1_account limit 1`;

    success('Database v1 tables ready for migration.');
  } catch (e) {
    throw new Error('Database v1 tables are not ready for migration.');
  }
}

应该是

await prisma.$queryRawselect * from v1_account limit 1;

这里执行出问题了

先不看代码逻辑,直接看数据库,的确是没有的,应该之前有执行备份的步骤,然后失败了,看了下v1_account这个表在这里生成的

async function renameV1Tables(databaseType) {
  try {
    // rename tables
    if (databaseType === 'postgresql') {
      await prisma.$transaction([
        prisma.$executeRaw`ALTER TABLE IF EXISTS _prisma_migrations RENAME TO v1_prisma_migrations;`,
        prisma.$executeRaw`ALTER TABLE IF EXISTS account RENAME TO v1_account;`,
        prisma.$executeRaw`ALTER TABLE IF EXISTS event RENAME TO v1_event;`,
        prisma.$executeRaw`ALTER TABLE IF EXISTS event_data RENAME TO v1_event_data;`,
        prisma.$executeRaw`ALTER TABLE IF EXISTS pageview RENAME TO v1_pageview;`,
        prisma.$executeRaw`ALTER TABLE IF EXISTS session RENAME TO v1_session;`,
        prisma.$executeRaw`ALTER TABLE IF EXISTS website RENAME TO v1_website;`,
      ]);
    } else {
        await executeRawIgnore('RENAME TABLE _prisma_migrations TO v1_prisma_migrations;');
        await executeRawIgnore('RENAME TABLE account TO v1_account;');
        await executeRawIgnore('RENAME TABLE event TO v1_event;');
        await executeRawIgnore('RENAME TABLE event_data TO v1_event_data;');
        await executeRawIgnore('RENAME TABLE pageview TO v1_pageview;');
        await executeRawIgnore('RENAME TABLE session TO v1_session;');
        await executeRawIgnore('RENAME TABLE website TO v1_website;');
    }

那就手动执行了一下,可能是因为我使用的是mariadb的问题

mariadb:10.3.27

提示语法错误,用下面的命令去重新命名的就好

RENAME TABLE account TO v1_account;
RENAME TABLE event TO v1_event;
RENAME TABLE event_data TO v1_event_data;
RENAME TABLE pageview TO v1_pageview;
RENAME TABLE session TO v1_session;
RENAME TABLE website TO v1_website;

之后继续执行

yarn start

root@01edbeefcd1f:/migrate-v1-v2# yarn start
yarn run v1.22.19
$ node index.js
✓ DATABASE_URL is defined.
✓ Database connection successful.
✓ Database v1 tables ready for migration.
Database v2 tables not found.
Adding v2 tables...
✓ Ran sql file /prisma/migrations/01_init/migration.sql.
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": MySQL database "umami" at "10.0.0.61:3306"
Migration 01_init marked as applied.

✓ Database is ready for migration.
✓ Starting v2 data migration. Please do no cancel this process, it may take a while.
✓ Ran sql file /prisma/data-migration-v2.sql.
✓ Data migration from V1 to V2 tables completed.
✔ Do you want to delete V1 database tables? (Y/N) … n
✓ Migration successfully completed.
Done in 103.83s.

执行成功

更新完成之后尝试登录,发现报错

这个应该是一个bug,其实1.0的时候也是有的,详细的可以看

https://github.com/umami-software/umami/issues/1892

最后不要忘记把站点中所有追踪脚本名字umami.js改为script.js

最终的效果可以看

https://umami.bboysoul.cn/share/o3KpnfdB/bboy.app

欢迎关注我的博客www.bboy.app

Have Fun


Tags:

本站总访问量 本站总访客数