Coder Social home page Coder Social logo

Comments (8)

rodrigoKulb avatar rodrigoKulb commented on September 23, 2024 2

Fala Felipe, ainda não fiz o teste, mas dei uma olhada achei isso:
postgres://user:pass@host:port/database?ssl=true
Veja se funciona!

from tabnews.com.br.

filipedeschamps avatar filipedeschamps commented on September 23, 2024 2

Avançamos! Esse erro ta acontecendo, porque pra testar eu to rodando os testes automatizados contra o banco de Preview/Staging, e ele dropa todas as tabelas de um jeito meio grosseiro, que é dropando o schema:

  async function dropAllTables() {
    const database = databaseFactory();
    await database.query("drop schema public cascade; create schema public;");
    await database.pool.end();
  }

Em ambiente Local não tem problema, mas como o banco de Staging/Prod é um serviço gerenciado pela DigitalOcean, eles não deixam. Daí encontrei isso

Trying the top answer on StackOverflow DROP SCHEMA public CASCADE; resulted in ERROR: must be owner of schema public . Since this is a managed database service, I won’t be able to do that. Thus the use of the alternate answer, repeated here for convenience:

DO $$ DECLARE
    r RECORD;
BEGIN
    -- if the schema you operate on is not "current", you will want to
    -- replace current_schema() in query with 'schematodeletetablesfrom'
    -- *and* update the generate 'DROP...' accordingly.
    FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
        EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
    END LOOP;
END $$;

Mas não vou alterar, pois em condições normais a gente não vai dropar isso em stag/produção (ou não, ou a gente uma hora vai querer resetar tudo). Mas deixa vir esse momento 👍

Vou programar aqui o novo if no pool e vamos ver se todos os ambientes funcionam 👍

from tabnews.com.br.

filipedeschamps avatar filipedeschamps commented on September 23, 2024 2

Empurrei um novo commit para o PR #82 e funcionou 😍 está se conectando no banco em todos os ambientes, mas a Vercel não está encontrando os arquivos na pasta de migration (deve estar se perdendo na resolução do caminho).

{
  "error": "Can't get migration files: Error: ENOENT: no such file or directory, scandir './infra/migrations/'"
}

Investigando...

from tabnews.com.br.

filipedeschamps avatar filipedeschamps commented on September 23, 2024 2

Então, procurar sobre resolução de paths no Next.js traz um histórico de bastante atrito no assunto 😂

De documentação oficial, o mais relacionado que encontrei foi isso. Mas como eu não acreditava que era isso, me inspirei em outra solução e fiz a resolução do caminho (e que acredito que vai ficar mais compatível com usuários que usam Windows inclusive):

const { join, resolve } = require("path");
//...

export default function Migrator() {
  const defaultConfigurations = {
    dir: join(resolve("."), "infra", "migrations"),  // <---
    direction: "up",
    migrationsTable: "migrations",
    verbose: false,
  };

E testei aqui e funcionou em todos os ambientes: development, test, ci e preview. O production eu vou deixar para live 👍

from tabnews.com.br.

filipedeschamps avatar filipedeschamps commented on September 23, 2024 2

O PR que conserta isso foi merged 👍 😍

from tabnews.com.br.

filipedeschamps avatar filipedeschamps commented on September 23, 2024 1

Show Rodrigão! O detalhe é que estamos usando o pg:
https://github.com/filipedeschamps/tabnews.com.br/blob/main/infra/database.js#L4

Nessa parte ele abre um pool de conexão, então meu chute é que vai ser preciso passar alguma espécie flag para evitar SSL se estamos em ambiente local, ou usar se estamos em produção. Daqui a pouco vou gravar o vídeo dos Membros e vou falar dessa issue, é o último blocker 😂 👍

from tabnews.com.br.

rodrigoKulb avatar rodrigoKulb commented on September 23, 2024 1

Ahh entendi vamos precisar deixar a opção de SSL variável conforme o ambiente, tipo assim?

const pool = new Pool({
    user: process.env.POSTGRES_USER,
    host: process.env.POSTGRES_HOST,
    database: process.env.POSTGRES_DB,
    password: process.env.POSTGRES_PASSWORD,
    port: process.env.POSTGRES_PORT,
    ssl: process.env.POSTGRES_SSL,
  });

from tabnews.com.br.

filipedeschamps avatar filipedeschamps commented on September 23, 2024 1

@rodrigoKulb show, quase isso! Olha só: https://node-postgres.com/announcements#2020-02-25

Então nosso pool tem que se conectar dessa forma:

  const pool = new Pool({
    user: process.env.POSTGRES_USER,
    host: process.env.POSTGRES_HOST,
    database: process.env.POSTGRES_DB,
    password: process.env.POSTGRES_PASSWORD,
    port: process.env.POSTGRES_PORT,
    ssl: {
      rejectUnauthorized: false
    },
  });

[edit] na verdade isso quebra em ambiente local, tem que fazer um if maluco 👍

E avançamos 😍 mas agora tomando esse erro: must be owner of schema public

from tabnews.com.br.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.