186 lines
5.7 KiB
Plaintext
186 lines
5.7 KiB
Plaintext
---
|
|
title: "Prisma setup guide"
|
|
sidebarTitle: "Prisma setup guide"
|
|
description: "This guide will show you how to set up Prisma with Trigger.dev"
|
|
icon: "Triangle"
|
|
---
|
|
|
|
import Prerequisites from "/snippets/framework-prerequisites.mdx";
|
|
import CliInitStep from "/snippets/step-cli-init.mdx";
|
|
import CliDevStep from "/snippets/step-cli-dev.mdx";
|
|
import CliRunTestStep from "/snippets/step-run-test.mdx";
|
|
import CliViewRunStep from "/snippets/step-view-run.mdx";
|
|
import UsefulNextSteps from "/snippets/useful-next-steps.mdx";
|
|
|
|
## Overview
|
|
|
|
This guide will show you how to set up [Prisma](https://www.prisma.io/) with Trigger.dev, test and view an example task run.
|
|
|
|
## Prerequisites
|
|
|
|
- An existing Node.js project with a `package.json` file
|
|
- Ensure TypeScript is installed
|
|
- A [PostgreSQL](https://www.postgresql.org/) database server running locally, or accessible via a connection string
|
|
- Prisma ORM [installed and initialized](https://www.prisma.io/docs/getting-started/quickstart) in your project
|
|
- A `DATABASE_URL` environment variable set in your `.env` file, pointing to your PostgreSQL database (e.g. `postgresql://user:password@localhost:5432/dbname`)
|
|
|
|
## Initial setup (optional)
|
|
|
|
Follow these steps if you don't already have Trigger.dev set up in your project.
|
|
|
|
<Steps>
|
|
<CliInitStep />
|
|
<CliDevStep />
|
|
<CliRunTestStep />
|
|
<CliViewRunStep />
|
|
</Steps>
|
|
|
|
## Creating a task using Prisma and deploying it to production
|
|
|
|
<Steps>
|
|
<Step title="Writing the Prisma task">
|
|
|
|
First, create a new task file in your `trigger` folder.
|
|
|
|
This is a simple task that will add a new user to the database.
|
|
|
|
<Note>
|
|
For this task to work correctly, you will need to have a `user` model in your Prisma schema with
|
|
an `id` field, a `name` field, and an `email` field.
|
|
</Note>
|
|
|
|
```ts /trigger/prisma-add-new-user.ts
|
|
import { PrismaClient } from "@prisma/client";
|
|
import { task } from "@trigger.dev/sdk";
|
|
|
|
// Initialize Prisma client
|
|
const prisma = new PrismaClient();
|
|
|
|
export const addNewUser = task({
|
|
id: "prisma-add-new-user",
|
|
run: async (payload: { name: string; email: string; id: number }) => {
|
|
const { name, email, id } = payload;
|
|
|
|
// This will create a new user in the database
|
|
const user = await prisma.user.create({
|
|
data: {
|
|
name: name,
|
|
email: email,
|
|
id: id,
|
|
},
|
|
});
|
|
|
|
return {
|
|
message: `New user added successfully: ${user.id}`,
|
|
};
|
|
},
|
|
});
|
|
```
|
|
|
|
</Step>
|
|
<Step title="Configuring the build extension">
|
|
|
|
Next, configure the Prisma [build extension](https://trigger.dev/docs/config/extensions/overview) in the `trigger.config.js` file to include the Prisma client in the build.
|
|
|
|
This will ensure that the Prisma client is available when the task runs.
|
|
|
|
```js /trigger.config.js
|
|
export default defineConfig({
|
|
project: "<project ref>", // Your project reference
|
|
// Your other config settings...
|
|
build: {
|
|
extensions: [
|
|
prismaExtension({
|
|
mode: "legacy", // required
|
|
version: "5.20.0", // optional, we'll automatically detect the version if not provided
|
|
schema: "prisma/schema.prisma", // update this to the path of your Prisma schema file
|
|
}),
|
|
],
|
|
},
|
|
});
|
|
```
|
|
|
|
The `prismaExtension` requires a `mode` parameter. For standard Prisma setups, use `"legacy"`
|
|
mode. See the [Prisma extension documentation](/config/extensions/prismaExtension) for other modes
|
|
and full configuration options.
|
|
|
|
<Note>
|
|
[Build extensions](/config/extensions/overview) allow you to hook into the build system and
|
|
customize the build process or the resulting bundle and container image (in the case of
|
|
deploying). You can use pre-built extensions or create your own.
|
|
</Note>
|
|
|
|
</Step>
|
|
|
|
<Step title="Optional: adding Prisma instrumentation">
|
|
|
|
We use OpenTelemetry to [instrument](https://trigger.dev/docs/config/config-file#instrumentations) our tasks and collect telemetry data.
|
|
|
|
If you want to automatically log all Prisma queries and mutations, you can use the Prisma instrumentation extension.
|
|
|
|
```js /trigger.config.js
|
|
import { defineConfig } from "@trigger.dev/sdk";
|
|
import { PrismaInstrumentation } from "@prisma/instrumentation";
|
|
import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai";
|
|
|
|
export default defineConfig({
|
|
//..other stuff
|
|
instrumentations: [new PrismaInstrumentation(), new OpenAIInstrumentation()],
|
|
});
|
|
```
|
|
|
|
This provides much more detailed information about your tasks with minimal effort.
|
|
|
|
</Step>
|
|
<Step title="Deploying your task">
|
|
With the build extension and task configured, you can now deploy your task using the Trigger.dev CLI.
|
|
|
|
<CodeGroup>
|
|
|
|
```bash npm
|
|
npx trigger.dev@latest deploy
|
|
```
|
|
|
|
```bash pnpm
|
|
pnpm dlx trigger.dev@latest deploy
|
|
```
|
|
|
|
```bash yarn
|
|
yarn dlx trigger.dev@latest deploy
|
|
```
|
|
|
|
</CodeGroup>
|
|
|
|
</Step>
|
|
|
|
<Step title="Adding your DATABASE_URL environment variable to Trigger.dev">
|
|
|
|
In your Trigger.dev dashboard sidebar click "Environment Variables" <Icon icon="circle-1" iconType="solid" size={20} color="A8FF53" />, and then the "New environment variable" button <Icon icon="circle-2" iconType="solid" size={20} color="A8FF53" />.
|
|
|
|
You can add values for your local dev environment, staging and prod. in this case we will add the `DATABASE_URL` for the production environment.
|
|
|
|

|
|
|
|
</Step>
|
|
|
|
<Step title="Running your task">
|
|
|
|
To test this task, go to the 'test' page in the Trigger.dev dashboard and run the task with the following payload:
|
|
|
|
```json
|
|
{
|
|
"name": "<a-name>", // e.g. "John Doe"
|
|
"email": "<a-email>", // e.g. "john@doe.test"
|
|
"id": <a-number> // e.g. 12345
|
|
}
|
|
```
|
|
|
|
Congratulations! You should now see a new completed run, and a new user with the credentials you provided should be added to your database.
|
|
|
|
</Step>
|
|
|
|
</Steps>
|
|
|
|
<UsefulNextSteps />
|