ClearDB соединяется с «npm run start», но не с Heroku deploy;ERR_CONNECTION_REFUSED - PullRequest
0 голосов
/ 12 февраля 2019

Я развернул приложение узла на Heroku и настроил ClearDB с MySQL Workbench.Когда я использую npm run start, он отлично работает, данные отображаются.Когда я открою в Heroku;heroku local web и heroku open приложение развернуто, но данные не отображаются.Сообщение об ошибке: resource: net :: ERR_CONNECTION_REFUSED .

Моя база данных крошечная, поэтому ограничение размера не является проблемой.Мой Procfile установлен на

web: npm run start

Почему мой clearDB не подключается через Heroku?

Некоторые другие ответы, которые я прочитал, включают .envфайл, которого у меня не было.Я попытался создать один с DATABASE_URL, но без изменений.Я также попытался добавить port: process.env.PORT || 3036 в файл конфигурации базы данных.

Я могу подключиться к базе данных Heroku / ClearDB через MySQL Workbench, и все таблицы есть.

Файл конфигурации моей базы данных:

import mysql from 'mysql'

let pool = mysql.createPool({
connectionLimit: 10,
user: '******',
password: '*******',
host: '*******',
database: '*******',
port: process.env.PORT || 3036
});

let chirprdb = {};

chirprdb.all = () => {
return new Promise((resolve, reject) => {
    pool.query('SELECT * FROM chirps', (err, results) => {
        if (err) {
            return reject(err);
        }
        return resolve(results);
    })
})
}

export default chirprdb;

Ожидаемый результат: см. Приложение и все его данные по развернутому URL Heroku

Фактический результат: просмотр приложения, но данные не загружаются, ошибка - ресурс: net :: ERR_CONNECTION_REFUSED

Редактировать Я изменил базу данных (чтобы не публиковать здесь свои учетные данные) и создал новое соединение с MySQL Workbench.При нажатии на «тестовое соединение» я получил это предупреждение enter image description here.

маршрутизатор, который импортирует chirperdb

import { Router } from 'express';
import db from '../db'

let router = Router();

router.get('/:id?', async (req, res) => {
let id = req.params.id;
if (id) {
    try {
        let results = await db.one(id);
        res.json(results);
    } catch (e) {
        console.log(e);
        res.sendStatus(500);
    }
} else {
    try {
        let results = await db.all();
        res.json(results);
    } catch (e) {
        console.log(e);
        res.sendStatus(500);
    }
}
});

1 Ответ

0 голосов
/ 12 февраля 2019

Прежде всего, прежде чем делать что-либо еще, измените свои учетные данные ClearDB.Вы разместили их здесь, и вы больше не можете им доверять.Редактирование вопроса для их удаления недостаточно.

Некоторые другие ответы, которые я прочитал, включают файл .env, которого у меня не было.Я попытался создать его с DATABASE_URL, но без изменений.

Не используйте файл .env в Heroku.Этот файл является просто окольным способом заполнения переменных среды, но Heroku изначально поддерживает переменные среды .Если вам нужно установить переменные окружения, сделайте это с помощью heroku config:set или веб-интерфейса.

Я также попытался добавить port: process.env.PORT || 3036 в файл конфигурации своей базы данных.

Переменная окружения PORT - это порт, который должен прослушивать ваш веб-сервер, а не порт, который следует использовать для подключения к базе данных.Должна быть переменная окружения CLEARDB_DATABASE_URL, уже установленная дополнением ClearDB.Используйте эту (или отдельные CLEARDB_ переменные, если необходимо) для подключения к MySQL.

Вы можете использовать библиотеку parse-database-url для анализа единственного значения CLEARDB_DATABASE_URL и подключения кваша база данных.

...