Estoy siguiendo las instrucciones oficiales para implementar mi aplicación de inicio strapi en Heroku. La aplicación funciona bien localmente. Lo único que omití en mis instrucciones de implementación fue instalar el módulo de nodo PG (ya está instalado porque mi aplicación local usa Postgresql).
Al acceder a los registros de Heroku, veo esto:
error: Middleware "strapi::session": App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])Tal vez este es un detalle importante: seguí este proceso una vez y todo funcionó. Pude desplegarme en Heroku. Lo intenté de nuevo y no funcionó. Estaba pensando que tal vez Heroku tenía un problema conmigo al reutilizar el nombre de una aplicación, pero traté de nombrar la aplicación con algo diferente en Heroku y todavía tenía el mismo error.
¿Heroku está buscando en el lugar equivocado mi archivo server.js? ¿Debería estar buscando en mi carpeta "./config/env/production" en lugar de mi carpeta "./config"?
Según las instrucciones, aquí está mi ./config/env/production/database.js
const parse = require('pg-connection-string').parse; const config = parse(process.env.DATABASE_URL); module.exports = ({ env }) => ({ connection: { client: 'postgres', connection: { host: config.host, port: config.port, database: config.database, user: config.user, password: config.password, ssl: { rejectUnauthorized: false }, }, debug: false, }, });Aquí está mi ./config/env/production/server.js
module.exports = ({ env }) => ({ url: env('MY_HEROKU_URL'), });Y aquí está mi ./config/server.js
module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env.int('PORT', 1337), app: { keys: env.array('APP_KEYS'), }, });mi paquete.json por si acaso:
{ "dependencies": { "@strapi/plugin-graphql": "^4.0.0", "@strapi/plugin-i18n": "4.0.6", "@strapi/plugin-users-permissions": "4.0.6", "@strapi/strapi": "4.0.6", "lodash.set": "^4.3.2", "pg": "8.6.0", "pg-connection-string": "^2.5.0" }, "name": "backend", "private": true, "version": "0.1.0", "description": "A Strapi application", "scripts": { "develop": "strapi develop", "start": "strapi start", "build": "strapi build", "strapi": "strapi" }, "devDependencies": {}, "author": { "name": "A Strapi developer" }, "strapi": { "uuid": "f64b509e-2d95-4464-8d39-d6f0d1c7a31a", "template": "@strapi/template-corporate@^1.0.0", "starter": "@strapi/starter-next-corporate" }, "engines": { "node": ">=12.xx <=16.xx", "npm": ">=6.0.0" }, "license": "MIT" }Estoy ejecutando Node v14.18.3 y NPM v6.14.15
En Heroku, para esa aplicación en particular, navegue a Configuración-> Vars de configuración y agregue sus variables de entorno allí.
Lo resolví con esto en ./config/env/production/server.js
module.exports = ({ env }) => ({ url: env("MY_HEROKU_URL"), proxy: true, app: { keys: env.array("APP_KEYS", ["testKey1", "testKey2"]), }, });testKey1, testKey2 son solo marcadores de posición y deben reemplazarse por 2 claves aleatorias a través de CONFIG VAR en heroku
APP_KEYS=someSecret,anotherSecret proxy: true también era importante. De lo contrario, arroja un Cannot send secure cookie over unencrypted connection
simplemente cree un archivo .env en la raíz de su proyecto de esta manera:
HOST=0.0.0.0 PORT=1337 APP_KEYS=jP8pb1lYsAhnmURarewxhA==,34xnLMYHY5jiU7ONTstTqQ==Por lo tanto, solo necesita crear una variable en la configuración de Heroku->config vars llamada APP_KEYS . Y el valor de esta variable puede obtenerse de su archivo .env donde debe tener la variable APP_KEYS con valor.