我为自己创建了一个示例项目,可以在Google App Engine上使用Sequelize尝试Node.js。
我可以在本地运行该项目并且工作正常,但是当我将其部署到App Engine gcloud app deploy
时
我收到以下错误:
{
name: "SequelizeDatabaseError",
message: "ER_NO_SUCH_TABLE: Table 'sql8175762.Likes' doesn't exist",
parent: {
code: "ER_NO_SUCH_TABLE",
errno: 1146,
sqlState: "42S02",
index: 0,
sql: "SELECT `id`, `code`, `likes`, `createdAt`, `updatedAt` FROM `Likes` AS `Likes`;"
},
original: {
code: "ER_NO_SUCH_TABLE",
errno: 1146,
sqlState: "42S02",
index: 0,
sql: "SELECT `id`, `code`, `likes`, `createdAt`, `updatedAt` FROM `Likes` AS `Likes`;"
},
sql: "SELECT `id`, `code`, `likes`, `createdAt`, `updatedAt` FROM `Likes` AS `Likes`;"
}
那是因为Sequelize迁移没有运行但是我确实在npm start命令中指定了它:
"scripts": {
"deploy": "gcloud app deploy",
"start": "npm install & sequelize db:migrate & NODE_ENV=production node ./bin/www"
},
我从未使用app引擎进行节点部署,我甚至不确定我所说的步骤是否正确,以便部署,迁移和运行应用程序。
有没有人对此有任何提示?
答案 0 :(得分:0)
我不知道您的设置,但是您是否有sequelize-cli包依赖,您是否尝试在根目录中添加.sequelizerc文件并添加配置,迁移和模型的路径?例如:
var path = require('path');
module.exports = {
'config': path.resolve('./', 'config/config.js'),
'migrations-path': path.resolve('./', 'src/server/migrations'),
'seeders-path': path.resolve('./', 'src/server/seeders'),
'models-path': path.resolve('./', 'src/server/models')
};
答案 1 :(得分:0)
我对这个问题有点晚了,但是如果其他人正在寻找,值得注意的是显示的示例脚本使用&在命令之间。
这将对每个命令进行后台处理并立即运行下一个命令,因此当节点启动时,npm install
和sequelize db:migrate
很可能仍在运行。
如果你使用的是unix系统(Mac / Linux)你可以通过创建一个名为./test.sh
的文件来本地测试它,包含
#!/bin/sh
echo "Starting long process ..."
sleep 5
echo "Long process done"
然后从命令行运行
chmod +x test.sh
./test.sh & echo "Running second process"
将命令更改为&&应该解决这个问题,即:
npm install & sequelize db:migrate & NODE_ENV=production node ./bin/www
答案 2 :(得分:0)
我有相同的经验,问题是由于某些原因,您必须在定义模型中添加import numpy as np
import cvxpy as cp
weights = cp.Variable(5)
d = cp.Variable(1)
meas = np.random.rand(8, 3)
det = np.random.rand(24, 5)
dm = d * np.eye(3) # (1)
beh = 1 + cp.reshape((dm @ meas.T).T, (24, )) # (2)
constrs = [beh == det @ weights] #(3)
和tableName
属性。例如:
freezeTableName: true
答案 3 :(得分:0)
您应该在启动命令中使用&&
而不是&
。
&
意味着在后台运行命令。
&&
的意思是“逻辑和”,以便外壳程序将逐个运行命令并等待每个返回的代码。