Faaaala galera, tudo bem com vocês?

Infelizmente o Docker pode ser um problema para alguns usuários, principalmente aqueles que estão utilizando o Windows. Nesse guia rápido, vamos mostrar pra vocês a como trocar do PostgreSQL para o SQLite (banco em arquivo) e utilizar um serviço online para o Redis.

Configurando o SQLite

  1. Se tiver a pasta prisma/migrations, apague ela. (está tudo bem se não tiver)

  2. No arquivo prisma/schema , troque o valor de provider para sqlite

    datasource db {
      provider = "sqlite" // Essa linha
      url      = env("DATABASE_URL")
    }
    
  3. No arquivo .env troque a URL de conexão para um novo caminho:

    DATABASE_URL="file:./app.db"
    

    Recomendamos colocar no .gitignore esses valores:

    *.db
    *.db-journal
    
  4. Executar o comando npx prisma migrate dev para criar as migrations. Informe o nome que preferir.

  5. Por fim, no arquivo src/http/routes/create-poll.ts, não é possível utilizar o createMany com o SQLite, vamos então trocar para:

    // ...
    // Primeiro, criar a poll, sem options.
    const poll = await prisma.poll.create({
      data: {
        title,
      }
    })
    
    // Em seguida, utilizar um Promise.all para criar todas as options:
    await Promise.all(options.map((option) => {
      return prisma.pollOption.create({
        data: {
          title: option,
          pollId: poll.id
        }
      })
    }))
    

Configurando o Upstash + Redis

Antes de tudo, o que é o Upstash? Upstash é uma plataforma com diversos serviços para ambiente serverless (outro tipo de aplicação que não precisa se preocupar agora, foco jovem gafanhoto), e um desses serviços é um Banco Redis. O plano free é bem generoso.

  1. Crie uma conta no site: Upstash: Serverless Data Platform

  2. No menu ao topo da página, selecione Redis e clique em “Create Database”.

    Esse modal deverá ser aberto:

    Untitled

    Coloque o nome de sua preferência, mantenha a opção Regional selecionada e no select abaixo escolha us-east-1.

    Não precisa marcar nenhuma das outras opções. Clique em Create.

  3. Ao criar sua Database, acesse ela e terá uma página parecida com essa:

    bcffb95ba92461382b864aec819abf913f8846d3b48c344b2b7f9ff04a96c46e copy.jpg

    Clique no botão informado e copie toda a URL de conexão.

  4. De volta ao seu projeto, no arquivo .env, crie uma nova variável com o nome REDIS_URL

    DATABASE_URL="file:./app.db"
    REDIS_URL="URL_AQUI"
    
  5. Por fim, no arquivo src/lib/redis.ts, vamos configurar para utilizar essa variável:

    import { Redis } from "ioredis";
    
    if (!process.env.REDIS_URL) {
      throw new Error("Missing REDIS_URL env var");
    }
    
    export const redis = new Redis(process.env.REDIS_URL)
    

    Você consegue visualizar os dados do banco na aba “Data Browser”

Concluindo todos esses passos a aplicação já irá funcionar sem precisar do Docker. Nice! 🚀

Segue o link do commit com todas essas alterações para caso queira comparar:

GitHub - rocketseat-education/nlw-expert-nodejs at 0f1a0f1e8343963ff72b523c5105de3d375e2b7f