Я пытаюсь подключиться к базе данных postgresql из Heroku из локального приложения nodejs с Sequelize. Я следил за этими двумя руководствами, и все отлично работает на стороне сервера heroky, но мое приложение node не будет подключаться к heroku, когда я запускаю его локально на своем Mac.
- http://sequelizejs.com/articles/heroku
- https://devcenter.heroku.com/articles/connecting-to-heroku-postgres-databases-from-outside-of-heroku
Вот как я запускаю локальное приложение:
DATABASE_URL=$(heroku config:get DATABASE_URL) nodemon
Получает меня:
Sequelize: Unable to connect to the database:
Но я получаю правильный URL, делая это:
echo $(heroku config:get DATABASE_URL)
И эти команды работают нормально:
heroku pg:psql
psql $(heroku config:get DATABASE_URL)
Вот мой код nodejs:
var match = process.env.DATABASE_URL.match(/postgres:\/\/([^:]+):([^@]+)@([^:]+):(\d+)\/(.+)/)
sequelize = new Sequelize(match[5], match[1], match[2], {
dialect: 'postgres',
protocol: 'postgres',
port: match[4],
host: match[3],
logging: false
})
sequelize
.authenticate()
.complete(function(err) {
if (!!err) {
log('Sequelize: Unable to connect to the database:', err);
} else {
http.listen(process.env.PORT || config.server.port, function(){
log('Web server listening on port '+process.env.PORT || config.server.port);
});
}
});
Я попытался добавить native: true
к параметрам sequelize, но затем я получаю:
/Users/clement/Projets/XMM/node_modules/sequelize/lib/sequelize.js:188
throw new Error('The dialect ' + this.getDialect() + ' is not supported.
^
Error: The dialect postgres is not supported. (Error: Please install postgres package manually)
at new module.exports.Sequelize (/Users/clement/Projets/XMM/node_modules/sequelize/lib/sequelize.js:188:13)
at Object.<anonymous> (/Users/clement/Projets/XMM/server.js:17:14)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:929:3
Даже после выполнения:
npm install pg
npm install -g pg
brew install postgresql
Это работает, кстати:
var pg = require('pg');
pg.connect(process.env.DATABASE_URL+'?ssl=true', function(err, client, done) {
if (err) return console.log(err);
client.query('SELECT * FROM pg_catalog.pg_tables', function(err, result) {
done();
if(err) return console.error(err);
console.log(result.rows);
});
});
Но я бы предпочел использовать Sequelize.