EDITAR: Encontré un archivo en /config/database.js que se usa para conectarse a sqlite en desarrollo. Cuando cambio el nombre del cliente de sqlite a postgres, ahí es cuando comienza el problema.
¿No se supone que strapi debe ignorar archivos como este en producción? ¿Cómo puedo hacer que strapi ignore este archivo y solo use mi base de datos de postgres?
module.exports = ({ env }) => ({ defaultConnection: 'default', connections: { default: { connector: 'bookshelf', settings: { client: 'sqlite', filename: env('DATABASE_FILENAME', '.tmp/data.db'), }, options: { useNullAsDefault: true, }, }, }, });Finalizar edición.
Estoy tratando de hacer que mi aplicación strapi se inicie en producción, pero sigue fallando diciendo
[2020-07-22T01:15:40.246Z] debug ⛔️ Server wasn't able to start properly. [2020-07-22T01:15:40.247Z] error error: password authentication failed for user "<redacted>" El resto de la salida está relacionada con pg, lo que me lleva a pensar que se trata de un error de conexión a la base de datos. Puedo iniciar sesión en mi base de datos desde la línea de comando usando psql -U postgres -W , lo que confirma que conozco mi contraseña.
Además, estoy usando pm2 para ejecutar cosas, y en lugar de usar process.env en ese archivo, solo agregué las variables db directamente, pero eso no hizo ninguna diferencia.
La aplicación ha sido construida en modo de producción. Tengo 3 dbs en pg, uno llamado postgres, uno con el nombre de mi aplicación y otro llamado strapi.
Gracias
mi /config/enviroronments/production.database.json se ve así
{ "defaultConnection": "default", "connections": { "default": { "connector": "bookshelf", "settings": { "client": "postgres", "host": "${process.env.DATABASE_HOST || '127.0.0.1'}", "port": "${process.env.DATABASE_PORT || 27017}", "database": "${process.env.DATABASE_NAME || 'strapi'}", "username": "${process.env.DATABASE_USERNAME || ''}", "password": "${process.env.DATABASE_PASSWORD || ''}" }, "options": { "ssl": false } } } }y tengo un archivo .env en la raíz de la aplicación de back-end que se ve así
DATABASE_HOST=localhost DATABASE_PORT=5432 DATABASE_NAME="<redacted - all letters>" DATABASE_USERNAME="<redacted - all letters>" DATABASE_PASSWORD="<redacted - all letters>"Encontré el problema. Cuando creé la aplicación, usé sqlite como mi base de datos. Como resultado, el archivo base de datos.js predeterminado no se configuró de manera que pudiera sobrescribirse con variables env.
Creé una nueva aplicación local de Strapi con pgsql como mi base de datos y copié el contenido del archivo database.js en mi servidor. Todo funcionando ahora.
Nuevo archivo para referencia
module.exports = ({ env }) => ({ defaultConnection: 'default', connections: { default: { connector: 'bookshelf', settings: { client: 'postgres', host: env('DATABASE_HOST', '127.0.0.1'), port: env.int('DATABASE_PORT', 5432), database: env('DATABASE_NAME', 'my-strapi-project'), username: env('DATABASE_USERNAME', 'testing'), password: env('DATABASE_PASSWORD', 'testing'), ssl: env.bool('DATABASE_SSL', false), }, options: {} }, }, });Tuve la misma situación en el desarrollo. Creé una aplicación strapi con SQLite y decidí usar PostgreSQL. Ahí es donde vino el problema. Así que la solución fue la siguiente:
nombre_aplicación/config/database.js
module.exports = ({ env }) => ({ connection: { client: 'postgres', connection: { host: env('DATABASE_HOST', '127.0.0.1'), port: env.int('DATABASE_PORT', 5432), database: env('DATABASE_NAME', 'db_name'), user: env('DATABASE_USERNAME', 'postgres'), password: env('DATABASE_PASSWORD', 'postgres'), ssl: env.bool('DATABASE_SSL', false), }, }, });Sus dependencias en app_name/package.json deberían ser como
"dependencies": { "@strapi/strapi": "4.1.8", "@strapi/plugin-users-permissions": "4.1.8", "@strapi/plugin-i18n": "4.1.8", "pg": "8.6.0" }