prisma.yml не может быть найден

Я пытаюсь создать схему для своей модели данных призмы, в то же время используя секреты для ограничения доступа к призме. После запускаprisma delete а также prisma deploy, Я запускаю команду graphql get-schema -p prisma и получите следующее сообщение об ошибке:

✖ prisma/prisma.yml не найден.

Я что-то не так делаю в своем .graphqlconfigили как я размещаю свой prisma.yml? Спасибо.

.graphqlconfig:

{
  "projects": {
    "prisma": {
      "schemaPath": "generated/prisma.graphql",
      "extensions": {
        "prisma": "prisma/prisma.yml",
        "endpoints": {
          "default": "http://localhost:4466"
        }
      }
    }
  }
}

prisma/prisma.yml:

endpoint: http://localhost:4466
datamodel: datamodel.prisma
secret: 'secretFoo'

index.js:

import http from 'http';
import express from 'express';
import { ApolloServer } from 'apollo-server-express';
import resolvers from './resolvers';
import schema from './generated/prisma.graphql';
import { Prisma } from 'prisma-binding';

const prisma = new Prisma({
  endpoint: 'http://localhost:4466',
  secret: 'secretFoo',
  typeDefs: 'server/generated/prisma.graphql',
});

const server = new ApolloServer({
  context: {
    prisma,
  },
  resolvers,
  typeDefs: schema,
});

const app = express();
server.applyMiddleware({ app });

const PORT = 5000;

const httpServer = http.createServer(app);
server.installSubscriptionHandlers(httpServer);

httpServer.listen(PORT, () => {
  console.log(`Server ready at http://localhost:${PORT}${server.graphqlPath}`);
  console.log(`Subscriptions ready at ws://localhost:${PORT}${server.subscriptionsPath}`);
});

if (module.hot) {
  module.hot.accept();
  module.hot.dispose(() => server.stop());
}

1 ответ

Решение

Вы можете создать схему прямо из вашего prisma.yml файл, добавив в файл следующее:

generate:
  - generator: graphql-schema
    output: ./generated/prisma.graphql

Тогда вы можете направить свой .graphqlconfig в сгенерированный файл:

projects:
  prisma:
    schemaPath: generated/prisma.graphql
    extensions:
      endpoints:
        dev: http://localhost:4466

Обычно вы ограничиваете доступ к функциям управления вашей конечной точки через файл Prisma docker-compose (managementApiSecret в PRISMA_CONFIG). Затем, когда вы запускаете такие команды, какprisma deploy вам нужно будет передать соответствующие переменные среды через --env-file flag, или имея файл dotenv в корне каталога вашего приложения (вам также понадобится dotenv пакет установлен в package.json.

Другой способ обезопасить вашу конечную точку - полностью отключить GraphQL Playground. Я считаю, что Apollo Server делает это автоматически, когдаNODE_ENV установлен на производство, хотя вы можете сделать это явно с помощью:

const server = new ApolloServer({
  context: {
    prisma,
  },
  resolvers,
  typeDefs: schema,
  playground: false, // <- Here
});

Извините, я не думаю, что это прямо ответило на ваш вопрос, но это может помочь в любом случае.

Другие вопросы по тегам