我在 Windows 10、vs-code 中编写后端代码,并将代码上传到 Ubuntu 服务器、node.js、MsSQL express。就我而言,我需要为每个客户创建一个新数据库,然后动态创建一个数据库(这里没问题),之后我必须运行脚本副本来构建模式、类型、函数(这是第一个脚本),然后如果成功,我必须运行脚本来创建表(第二个脚本),如果成功,我将为所有存储过程运行第三个脚本文件,然后数据库就可以使用了。
要运行脚本文件,我依赖于sqlcmd-runner
,这是我们使用的代码:
var sqlcmd = require('sqlcmd-runner');
exports.executeFile = (year, file_data, fileErr, cb) => {
sqlcmd({
username: 'sa',
password: 'Roshan1402Roshan',
server: 'localhost',
database: 'ebrahimi_522_1402',
port: 1433,
trustServerCert: true,
inputFiles: [`${file_data}`],
outputFile: `${fileErr}`,
})
.catch((error) => {
cb(error.message)
})
.done((data) => {
cb(null, data)
}); }
在我们的开发环境中(安装了 Windows 10、MSSQL、Nodejs 等)每个步骤都正常运行,并且工作完成得很好。
我搜索了一下,似乎要运行sqlcmd
它,我必须设置它,我按照所有步骤sqlcmd
在我的ubuntu
服务器上进行设置。为了检查它是否sqlcmd
正常工作,我尝试了此代码,它运行良好:
这将创建所有模式和其他模式:
sqlcmd -S localhost -d db_roshan_ir -U sa -P Roshan1402Roshan -C -i "/var/www/hesabroshan/app.hesabroshan.ir/Scripts/001/functions.sql"
这将创建所有表:
sqlcmd -S localhost -d db_roshan_ir -U sa -P Roshan1402Roshan -C -i "/var/www/hesabroshan/app.hesabroshan.ir/Scripts/001/tables.sql"
这将创建所有存储过程:
sqlcmd -S localhost -d db_roshan_ir -U sa -P Roshan1402Roshan -C -i "/var/www/hesabroshan/app.hesabroshan.ir/Scripts/001/sps.sql"
但是当我们使用 pm2 运行我们的项目并监控它时,会发生这个错误:
at ChildProcess._handle.onexit (node:internal/child_process:283:19)
at onErrorNT (node:internal/child_process:476:16)
at process.processTicksAndRejections (node:internal/process/task_queues:82:
errno: -2,
code: 'ENOENT',
syscall: 'spawn sqlcmd',
path: 'sqlcmd',
spawnargs: [
'-S',
'localhost',
'-d',
'db_roshan_ir',
'-U',
'sa',
'-P',
'Roshan1402Roshan',
'-C',
'-i',
'\\var\\www\\hesabroshan\\app.hesabroshan.ir\\Scripts\\001\\functions.sql',
'-o',
'\\var\\www\\hesabroshan\\app.hesabroshan.ir\\Scripts\\001\\err_func_522_14'
]
我认为服务器有问题,但我找不到。我尝试了很多方法,很多服务器地址,如 Ip、Ip+instance、Ip+instance+port。