所以我试图将我的nodejs应用程序部署到heroku
我在package.json
"scripts": {
"test": "./node_modules/.bin/mocha -r mocha-cakes",
"start": "rm -r -f database/test.db && node app.js",
"start-win": "del database\\test.db && node app.js"
}
我还在web: rm -r -f database/test.db && node app.js
Procfile
但是我的dyno仍然崩溃并出现以下日志错误:
2016-06-25T12:27:58.216435+00:00 heroku[web.1]: Starting process with command `npm start`
2016-06-25T12:28:00.503447+00:00 app[web.1]: npm ERR! argv "/app/.heroku/node/bin/node" "/app/.heroku/node/bin/npm" "start"
2016-06-25T12:28:00.502867+00:00 app[web.1]: npm ERR! Linux 3.13.0-85-generic
2016-06-25T12:28:00.504156+00:00 app[web.1]: npm ERR! npm v3.8.6
2016-06-25T12:28:00.503707+00:00 app[web.1]: npm ERR! node v5.11.1
2016-06-25T12:28:00.506550+00:00 app[web.1]: npm ERR! missing script: start
2016-06-25T12:28:00.506746+00:00 app[web.1]: npm ERR!
2016-06-25T12:28:00.506912+00:00 app[web.1]: npm ERR! <https://github.com/npm/npm/issues>
2016-06-25T12:28:00.516583+00:00 app[web.1]:
2016-06-25T12:28:00.516795+00:00 app[web.1]: npm ERR! Please include the following file with any support request:
2016-06-25T12:28:00.516913+00:00 app[web.1]: npm ERR! /app/npm-debug.log
2016-06-25T12:28:00.506796+00:00 app[web.1]: npm ERR! If you need help, you may report this error at:
2016-06-25T12:28:00.505628+00:00 app[web.1]:
2016-06-25T12:28:01.445657+00:00 heroku[web.1]: Process exited with status 1
2016-06-25T12:28:01.461079+00:00 heroku[web.1]: State changed from starting to crashed
2016-06-25T12:28:01.461867+00:00 heroku[web.1]: State changed from crashed to starting
2016-06-25T12:28:04.433811+00:00 heroku[web.1]: Starting process with command `npm start`
我已经检查了其他SO问题,但没有一个答案解决了我的问题。我已经尝试过其他帖子推荐的所有内容,但尚未找到任何成功。
如果您想查看源代码,请参阅我的回购邮件的link。
答案 0 :(得分:0)
在创建表后的/database/database.js文件中,如果那些表不存在,则会有一个db.run查询读取该XML文件。
db.run('INSERT OR IGNORE INTO managers (username, password) VALUES ("admin","admin")', function(){
//
// Dear fellow coder:
//
// Once you are done trying to 'optimize' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
//
// total_hours_wasted_here = 3
//
// When I wrote this, only God and I understood what I was doing
// Now, God only knows
//
// Magic, Do not touch
//initialise the table values from log file
// I want to read the xml file after the database tables have been created. HACK HACK!!!
$this.readLogFile();
console.log('Loaded Data from XML document');
});
我不确定除了测试你在部署的代码中有这个的原因是什么。我想你想要在部署后删除数据库的原因是你只需要在测试中使用它。
由于Heroku似乎不喜欢rm -r -f database/test.db
,我建议您对此进行评论以进行部署,或者作为更优雅的解决方案,在调用此DB查询之前添加if语句,只有在您进行测试时才运行它布尔值为true的环境变量。您还应该从开始脚本中删除rm -r -f database/test.db
。
您的方法的另一个问题是启动脚本甚至在导入XML文件之前运行,因此在启动脚本中使用db进行的任何操作都不会删除它。
相反,您还可以创建每次启动服务器时在app.js中调用的查询。该查询应该清空整个数据库。但是为什么要阅读并删除它,当你根本不能阅读它时。