【问题标题】:Sequelize not working after the web being deployed to AWS Elastic Beanstalk在将 Web 部署到 AWS Elastic Beanstalk 后,Sequelize 无法正常工作
【发布时间】:2020-10-28 05:18:54
【问题描述】:

我目前正在将我的网站部署到 AWS Elastic Beanstalk。我使用 PostgreSQL 和 Sequelize,所以例如我有几个模型如下所示:

在模型/USER.js中

const sequelize = require('sequelize')
const db = require('../config/database')


const USER = db.define('USER', {
id: {
    type: sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
},
name: {
    type: sequelize.STRING,
    allowNull: false,
    defaultValue: null
},
email: {
    type: sequelize.STRING,
    allowNull: false,
    defaultValue: null
},
password: {
    type: sequelize.STRING,
    allowNull: false,
    defaultValue: null
},
authen: {
    type: sequelize.JSONB,
    allowNull: false,
    defaultValue: null

}}, {
  tableName: 'USER',
  freezeTableName: true,
  timestamps: false
})

USER.sync().then(() => {
 console.log('table created')
}).catch((err) => {
 console.log(err)
})

module.exports = USER

另外,当我需要从数据库中检索数据时,我会这样做

在 routes/users.js 中

 const USER = require('../models/USER')
 ....
 router.get('/', (req, res) => {

     USER.findAll().then((users) => {
         res.render('controlcenter', {
         layout: 'layoutB',
         users
    })
})})

当我访问 localhost:3000/users 时,基本上上面会从数据库中获取所有用户,并且它在 localhost 上完美运行。

但是,在将 Web 部署到 AWS 后,当我尝试访问 /users 页面时,Web 一直在加载,然后引发 504 Gateway Timeout 错误。

我很确定这是与 Sequelize 或 PostgreSQL 相关的问题,因为所有不涉及进入数据库和获取数据的页面都可以正常工作。

这是我连接数据库的方式,我使用的是 RDS

在 config/database.js 中

 const Sequelize = require('sequelize')

 module.exports = new Sequelize('****', 'postgres', '****', {
 host: '****.****.us-east-2.rds.amazonaws.com',
 port: 5432,
 logging: console.log,
 maxConcurrentQueries: 100,
 dialect: 'postgres',
 dialectOptions: {
     ssl: {
         require: true,
         rejectUnauthorized: false
     }
 },
 pool: {
     maxConnections: 5,
     maxIdleTime: 30
 },
 language: 'en'})

在 app.js 中

// Database Config
const db = require('./config/database')

// Test Connection
db.authenticate()
    .then(() => console.log('Database connect'))
    .catch(err => console.log('Error' + err))

谁能帮我解决这个问题,或者给我一些关于我应该如何解决这个问题的提示?谢谢。

【问题讨论】:

    标签: node.js postgresql sequelize.js amazon-elastic-beanstalk amazon-rds


    【解决方案1】:

    超时通常意味着防火墙问题。

    由于您一直在本地开发,我假设您有一个独立于 Elastic Beanstalk 环境的 RDS 实例。

    您是否已将 Elastic Beanstalk 安全组添加到您的 RDS 实例?

    https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html

    【讨论】:

    • 是的,RDS 实例已添加到环境中。该实例也连接到 PostgreSQL,所以当 web 在本地运行时,我可以从那里访问数据。
    猜你喜欢
    • 2015-06-03
    • 2020-03-24
    • 2014-07-24
    • 1970-01-01
    • 2015-09-20
    • 2015-07-28
    • 2020-04-25
    • 2016-07-06
    • 2018-09-06
    相关资源
    最近更新 更多