You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Prisma、Remix与Fly为生产数据库执行数据填充?

解决Fly实例上Prisma Seed执行失败的问题

核心原因

Fly生产环境默认仅安装dependencies中的包,devDependencies里的tsx、ts-node、typescript会被跳过;即使手动移到dependencies,实例环境也可能缺少TS运行所需的配置或路径映射,导致执行失败。

可行解决方案

方案1:预编译Seed脚本为JS(推荐)

这是最稳定的生产环境方案,避免在实例上处理TS编译:

  1. 修改tsconfig.json,确保prisma目录的TS文件被包含在编译范围内:
    {
      "include": ["app/**/*", "prisma/**/*"]
    }
    
  2. 编译Seed脚本:执行项目的编译命令(比如Remix默认的npm run build),确保prisma/seed.ts被编译到dist/prisma/seed.js(具体路径根据你的tsconfig输出目录调整)。
  3. 更新package.json中的Prisma配置:将seed命令指向编译后的JS文件:
    {
      "prisma": {
        "seed": "node dist/prisma/seed.js"
      }
    }
    
  4. 重新部署到Fly:确保部署过程中执行了编译步骤(Fly的默认Remix部署流程会自动执行npm run build),之后SSH到实例执行npx prisma db seed即可。

方案2:临时在实例上安装完整依赖执行

适合一次性seed操作,不修改项目配置:

  1. SSH连接到Fly实例后,先安装所有依赖(包括dev):
    npm install
    
  2. 再执行seed命令:
    npx prisma db seed
    
    或者直接用npx拉取tsx执行,跳过本地安装:
    npx tsx@latest prisma/seed.ts
    

方案3:修改Fly部署配置临时安装Dev依赖(不推荐)

仅用于测试,会增大生产镜像体积:
在fly.toml中添加构建参数,强制安装dev依赖:

[build.args]
NODE_ENV = "development"

重新部署后,实例会包含所有dev依赖,可直接执行npx prisma db seed。测试完成后记得改回NODE_ENV = "production"。

方案4:将Seed脚本改为JS格式

直接避免TS编译环节:

  1. 将prisma/seed.ts重命名为prisma/seed.js,调整语法为JS(比如去掉类型注解等)。
  2. 更新package.json中的seed命令:
    {
      "prisma": {
        "seed": "node prisma/seed.js"
      }
    }
    
  3. 重新部署后执行seed命令即可。

内容的提问来源于stack exchange,提问作者marcusps1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:37:38