Comments (8)
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.
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.
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.
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.
O PR que conserta isso foi merged 👍 😍
from tabnews.com.br.
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.
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.
@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)
- Bloquear cadastro com senhas fracas HOT 7
- Marcar um comentário como resposta? HOT 7
- Melhorar a Exibição de Erros de Autenticação HOT 4
- Melhorar processamento dos comentários HOT 2
- havera uma versão em inglês ? HOT 2
- Implementação do pubsubhubbub na RSS
- Adicionar funcionalidade de Favoritar os posts HOT 1
- Tabnews: múltiplos logins associados ao mesmo endereço Gmail. Detalhes na descrição. HOT 3
- Mensagem de erro ao tentar publicar novo conteúdo HOT 7
- Encerramento da parceria com a Vercel HOT 23
- Campo `description` em algumas páginas causa resultados inadequados no Google HOT 3
- Posso implementar a opção de Login com github? HOT 2
- Latex em publicações HOT 1
- Página de anúncio tem link para o próprio anúncio HOT 2
- Limitar anúncios ativos por usuário HOT 10
- Implementação de categorização de posts HOT 1
- Forçar usuário a comentar quando tentar negativar post HOT 2
- Problema com testes locais HOT 6
- inconsistência na contagem de comentários de uma postagem HOT 2
- Existem algumas palavras erradas na página de: "Sobre trabalhar como freelancer"" HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tabnews.com.br.